)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a4f8dee3fccee91a2275aa2a3517fef6443bc4ca","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The instance.rescue.start and instance.rescue.end notifications"},{"line_number":10,"context_line":"are transformed to the versioned framework."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: bp versioned-notification-transformation-ocata"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ib1d03c6d693e3b04886c638c956e35809fed8fc2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa31d9ce_04ed9cb6","line":12,"updated":"2017-02-15 11:46:46.000000000","message":"if you have to respin the patch then please change this to versioned-notification-transformation-pike","commit_id":"73698f5de9ff91d993f2cb619fa3bcc50095a67f"}],"doc/notification_samples/instance-rescue-end.json":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"3f989d8654147f6af5ea41ecf7e2a27644ac7a81","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"power_state\":\"running\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":null,"},{"line_number":49,"context_line":"            \"reservation_id\":\"r-npxv0e40\","},{"line_number":50,"context_line":"            \"state\":\"active\","},{"line_number":51,"context_line":"            \"task_state\":\"rescuing\","}],"source_content_type":"application/json","patch_set":5,"id":"ba5da102_a2e19400","line":48,"range":{"start_line":48,"start_character":1,"end_line":48,"end_character":36},"updated":"2016-11-01 01:39:28.000000000","message":"Not sure how to assign the fake value for the rescue_image_ref","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"98e01a0d3983b2ebf941b771dc13273ffe29d62f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"power_state\":\"running\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":null,"},{"line_number":49,"context_line":"            \"reservation_id\":\"r-npxv0e40\","},{"line_number":50,"context_line":"            \"state\":\"active\","},{"line_number":51,"context_line":"            \"task_state\":\"rescuing\","}],"source_content_type":"application/json","patch_set":5,"id":"9a629dbe_cbad0c33","line":48,"range":{"start_line":48,"start_character":1,"end_line":48,"end_character":36},"in_reply_to":"ba5da102_118e6927","updated":"2016-11-08 05:32:35.000000000","message":"requesting for more info here.","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bd1532472a1471fc0fda23f53cf9adcb1e771d46","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"power_state\":\"running\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":null,"},{"line_number":49,"context_line":"            \"reservation_id\":\"r-npxv0e40\","},{"line_number":50,"context_line":"            \"state\":\"active\","},{"line_number":51,"context_line":"            \"task_state\":\"rescuing\","}],"source_content_type":"application/json","patch_set":5,"id":"ba5da102_118e6927","line":48,"range":{"start_line":48,"start_character":1,"end_line":48,"end_character":36},"in_reply_to":"ba5da102_a2e19400","updated":"2016-11-04 16:44:03.000000000","message":"There is a \u0027rescue_image_id\u0027 configuration parameter that contains the image used for rescue so in your test you can set that and the set id should appear in the notification","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c2489654e97b81a885591bf093cb639194aafd76","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"power_state\":\"running\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":null,"},{"line_number":49,"context_line":"            \"reservation_id\":\"r-npxv0e40\","},{"line_number":50,"context_line":"            \"state\":\"active\","},{"line_number":51,"context_line":"            \"task_state\":\"rescuing\","}],"source_content_type":"application/json","patch_set":6,"id":"ba5da102_fe6a2e80","line":48,"range":{"start_line":48,"start_character":12,"end_line":48,"end_character":35},"updated":"2016-11-02 22:22:34.000000000","message":"added this extra info (for rescue-start and rescue-end) but need guidance on how to fill the fake value","commit_id":"ae8c4e4ab4c0d24b769464efbe7abc155d0e179b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c2489654e97b81a885591bf093cb639194aafd76","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            \"user_id\":\"fake\","},{"line_number":55,"context_line":"            \"uuid\":\"178b0921-8f85-4257-88b6-2e743b5a975c\""},{"line_number":56,"context_line":"        },"},{"line_number":57,"context_line":"        \"nova_object.name\":\"InstanceActionRescuePayload\","},{"line_number":58,"context_line":"        \"nova_object.namespace\":\"nova\","},{"line_number":59,"context_line":"        \"nova_object.version\":\"1.0\""},{"line_number":60,"context_line":"    },"}],"source_content_type":"application/json","patch_set":6,"id":"ba5da102_be4d1640","line":57,"range":{"start_line":57,"start_character":28,"end_line":57,"end_character":55},"updated":"2016-11-02 22:22:34.000000000","message":"renamed the payload for both rescue-start and rescue-end.","commit_id":"ae8c4e4ab4c0d24b769464efbe7abc155d0e179b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c6214ca2a8a814cb3224f282cfdf41af1f91eb43","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \"metadata\":{},"},{"line_number":43,"context_line":"            \"node\":\"fake-mini\","},{"line_number":44,"context_line":"            \"os_type\":null,"},{"line_number":45,"context_line":"            \"power_state\":\"pending\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":\"a2459075-d96c-40d5-893e-577ff92e721c\","}],"source_content_type":"application/json","patch_set":17,"id":"5a74a57a_7d73f9e7","line":45,"range":{"start_line":45,"start_character":27,"end_line":45,"end_character":34},"updated":"2016-11-30 01:31:07.000000000","message":"power_state changed from \"running\" to \"pending\"","commit_id":"ee1749f344b57411aa1768d6f56d1daf262daf8d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b539a0b033ffe881702833d3a07cfd5fd11cbfa9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                    \"extra_specs\": {"},{"line_number":24,"context_line":"                        \"hw:watchdog_action\": \"disabled\""},{"line_number":25,"context_line":"                    },"},{"line_number":26,"context_line":"                   \"projects\": null,"},{"line_number":27,"context_line":"                    \"swap\": 0,"},{"line_number":28,"context_line":"                    \"is_public\": true,"},{"line_number":29,"context_line":"                    \"vcpu_weight\": 0"}],"source_content_type":"application/json","patch_set":36,"id":"7f231b9d_b633e8f6","line":26,"range":{"start_line":26,"start_character":19,"end_line":26,"end_character":21},"updated":"2017-06-19 18:00:55.000000000","message":"alignment off here.","commit_id":"7aa5b21df0b7adfe84161ed4fa13b8918fac94b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14f1764ceb8b829c0d6a7b4ba28762e8a66e5821","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"7f96bb07_acbcb669","updated":"2018-01-11 15:04:19.000000000","message":"You could use a common json fragment for this payload as well. Similarly how InstanceCreatePayload fragment was created from InstanceActionPayload fragment in https://review.openstack.org/#/c/523456/","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"7f79dc451c7b44a924ba7aeac4b28d26fe0a2424","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"7f96bb07_1d7e28e4","in_reply_to":"7f96bb07_acbcb669","updated":"2018-01-12 01:23:08.000000000","message":"Done","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"}],"doc/notification_samples/instance-rescue-start.json":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"3f989d8654147f6af5ea41ecf7e2a27644ac7a81","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            \"power_state\":\"running\","},{"line_number":46,"context_line":"            \"progress\":0,"},{"line_number":47,"context_line":"            \"ramdisk_id\":\"\","},{"line_number":48,"context_line":"            \"rescue_image_ref\":null,"},{"line_number":49,"context_line":"            \"reservation_id\":\"r-npxv0e40\","},{"line_number":50,"context_line":"            \"state\":\"active\","},{"line_number":51,"context_line":"            \"task_state\":\"rescuing\","}],"source_content_type":"application/json","patch_set":5,"id":"ba5da102_c2e848e5","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":36},"updated":"2016-11-01 01:39:28.000000000","message":"am not sure how to assign the fake value for the rescue_image_ref","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14f1764ceb8b829c0d6a7b4ba28762e8a66e5821","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"7f96bb07_ac7116e3","updated":"2018-01-11 15:04:19.000000000","message":"You could use a common json fragment for this payload as well. Similarly how InstanceCreatePayload fragment was created from InstanceActionPayload fragment in https://review.openstack.org/#/c/523456/","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"7f79dc451c7b44a924ba7aeac4b28d26fe0a2424","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"7f96bb07_bd8294c7","in_reply_to":"7f96bb07_ac7116e3","updated":"2018-01-12 01:23:08.000000000","message":"Done","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"}],"nova/compute/manager.py":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c2489654e97b81a885591bf093cb639194aafd76","unresolved":false,"context_lines":[{"line_number":3287,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":3288,"context_line":"                \"rescue.start\", extra_usage_info\u003dextra_usage_info,"},{"line_number":3289,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":3290,"context_line":"        compute_utils.notify_about_instance_action(context, instance,"},{"line_number":3291,"context_line":"            self.host, action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3292,"context_line":"            phase\u003dfields.NotificationPhase.START)"},{"line_number":3293,"context_line":""},{"line_number":3294,"context_line":"        try:"},{"line_number":3295,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_59d7b44a","line":3292,"range":{"start_line":3290,"start_character":1,"end_line":3292,"end_character":49},"updated":"2016-11-02 22:22:34.000000000","message":"should I create a new function to allow it to pass on the rescue_image_ref as one of the parameters?","commit_id":"ae8c4e4ab4c0d24b769464efbe7abc155d0e179b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3b01a803ef498866a6e461786a0bf14e71d7ab4e","unresolved":false,"context_lines":[{"line_number":3287,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":3288,"context_line":"                \"rescue.start\", extra_usage_info\u003dextra_usage_info,"},{"line_number":3289,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":3290,"context_line":"        compute_utils.notify_about_instance_action(context, instance,"},{"line_number":3291,"context_line":"            self.host, action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3292,"context_line":"            phase\u003dfields.NotificationPhase.START)"},{"line_number":3293,"context_line":""},{"line_number":3294,"context_line":"        try:"},{"line_number":3295,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_711085a9","line":3292,"range":{"start_line":3290,"start_character":1,"end_line":3292,"end_character":49},"in_reply_to":"ba5da102_59d7b44a","updated":"2016-11-04 16:44:31.000000000","message":"Yes, that is the way I suggest, like in the swap volume case.","commit_id":"ae8c4e4ab4c0d24b769464efbe7abc155d0e179b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c2489654e97b81a885591bf093cb639194aafd76","unresolved":false,"context_lines":[{"line_number":3317,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":3318,"context_line":"                \"rescue.end\", extra_usage_info\u003dextra_usage_info,"},{"line_number":3319,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":3320,"context_line":"        compute_utils.notify_about_instance_action(context, instance,"},{"line_number":3321,"context_line":"            self.host, action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3322,"context_line":"            phase\u003dfields.NotificationPhase.END)"},{"line_number":3323,"context_line":""},{"line_number":3324,"context_line":"    @wrap_exception()"},{"line_number":3325,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_b9c61098","line":3322,"range":{"start_line":3320,"start_character":0,"end_line":3322,"end_character":47},"updated":"2016-11-02 22:22:34.000000000","message":"ditto","commit_id":"ae8c4e4ab4c0d24b769464efbe7abc155d0e179b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"942f856f92eed60c7dffaf871872905449c31794","unresolved":false,"context_lines":[{"line_number":3307,"context_line":"            context, instance, self.host,"},{"line_number":3308,"context_line":"            action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3309,"context_line":"            phase\u003dfields.NotificationPhase.START,"},{"line_number":3310,"context_line":"            rescue_image_ref)"},{"line_number":3311,"context_line":""},{"line_number":3312,"context_line":"        try:"},{"line_number":3313,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_3536e703","line":3310,"range":{"start_line":3310,"start_character":0,"end_line":3310,"end_character":29},"updated":"2016-11-08 05:21:11.000000000","message":"As you can see the two set of codes for RESCUE.START and RESCUE.END look almost identical. Yet for some reason RESCUE.START is getting the following error for this line:\n\nSyntaxError: non-keyword arg after keyword arg\n\nhowever, RESCUE.END line # 3343 does not trigger any error.","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"062414ad792b9d42118ad47e555cb2e8c203c475","unresolved":false,"context_lines":[{"line_number":3307,"context_line":"            context, instance, self.host,"},{"line_number":3308,"context_line":"            action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3309,"context_line":"            phase\u003dfields.NotificationPhase.START,"},{"line_number":3310,"context_line":"            rescue_image_ref)"},{"line_number":3311,"context_line":""},{"line_number":3312,"context_line":"        try:"},{"line_number":3313,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_ab4ff390","line":3310,"range":{"start_line":3310,"start_character":0,"end_line":3310,"end_character":29},"in_reply_to":"9a629dbe_3536e703","updated":"2016-11-08 08:51:32.000000000","message":"The problem is that action, and phase passed as keyword args (action\u003d\u003c\u003e) while rescue_image_re is passed as positional arg. Python does not allow passing positional arguments after keyword arguments (as the position become ambiguous). You either pass action and phase also as positional args or pass rescue_image_ref as keyword argument (e.g. rescue_image_ref\u003drescue_image_ref)\n\nThe problem does not reported from line 3343 because the SyntaxError at line 3310 prevents the execution to ever reach 3343. After you fix 3310 similar problem will be reported from line 3343.\n\nTo read more about argument passing see https://docs.python.org/2/tutorial/controlflow.html#keyword-arguments","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"94ce884217aa50eea915fc2727c57f9f752def23","unresolved":false,"context_lines":[{"line_number":3307,"context_line":"            context, instance, self.host,"},{"line_number":3308,"context_line":"            action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3309,"context_line":"            phase\u003dfields.NotificationPhase.START,"},{"line_number":3310,"context_line":"            rescue_image_ref)"},{"line_number":3311,"context_line":""},{"line_number":3312,"context_line":"        try:"},{"line_number":3313,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_da63ea18","line":3310,"range":{"start_line":3310,"start_character":0,"end_line":3310,"end_character":29},"in_reply_to":"9a629dbe_ab4ff390","updated":"2016-11-08 20:33:17.000000000","message":"ohhh ugh now i got it, thank you!","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b539a0b033ffe881702833d3a07cfd5fd11cbfa9","unresolved":false,"context_lines":[{"line_number":3473,"context_line":"                \"rescue.end\", extra_usage_info\u003dextra_usage_info,"},{"line_number":3474,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":3475,"context_line":""},{"line_number":3476,"context_line":"        compute_utils.notify_about_rescue_instance("},{"line_number":3477,"context_line":"            context, instance, self.host,"},{"line_number":3478,"context_line":"            phase\u003dfields.NotificationPhase.END,"},{"line_number":3479,"context_line":"            rescue_image_ref\u003drescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f231b9d_f695e089","line":3476,"updated":"2017-06-19 18:00:55.000000000","message":"Is there a reason we have a new notify_about_rescue_instance() method in compute_utils but for unrescue we\u0027re using the existing notify_about_instance_action() method?","commit_id":"7aa5b21df0b7adfe84161ed4fa13b8918fac94b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"351313f65a68f9b2aa4f37a6e84facad640aa2f8","unresolved":false,"context_lines":[{"line_number":3473,"context_line":"                \"rescue.end\", extra_usage_info\u003dextra_usage_info,"},{"line_number":3474,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":3475,"context_line":""},{"line_number":3476,"context_line":"        compute_utils.notify_about_rescue_instance("},{"line_number":3477,"context_line":"            context, instance, self.host,"},{"line_number":3478,"context_line":"            phase\u003dfields.NotificationPhase.END,"},{"line_number":3479,"context_line":"            rescue_image_ref\u003drescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":36,"id":"5f201791_453ddfb9","line":3476,"in_reply_to":"7f231b9d_f695e089","updated":"2017-06-21 07:43:56.000000000","message":"The reason is the extra rescue_image_ref parameter that is part of the rescue notification but not part of the unrescue notification.\n\nAs the legacy notification also contains this extra info I agree to add this to the versioned one. Do you agree?","commit_id":"7aa5b21df0b7adfe84161ed4fa13b8918fac94b1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"07e026a7bd13c13c9e96ca5f83a1a35697a1b517","unresolved":false,"context_lines":[{"line_number":3444,"context_line":"        compute_utils.notify_about_instance_action("},{"line_number":3445,"context_line":"            context, instance, self.host,"},{"line_number":3446,"context_line":"            action\u003dfields.NotificationAction.RESCUE,"},{"line_number":3447,"context_line":"            phase\u003dfields.NotificationPhase.START)"},{"line_number":3448,"context_line":"        try:"},{"line_number":3449,"context_line":"            self._power_off_instance(context, instance, clean_shutdown)"},{"line_number":3450,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"5f201791_25b8a328","line":3447,"updated":"2017-06-21 07:45:16.000000000","message":"Now we are missing the rescue_image_ref in the versioned rescue notification. I think we shall add that back to be in sync with the legacy notification content","commit_id":"765fc6eeafbabad13d353ae627caae96e8f1aeed"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"48e8df66b121341b276deff722f936c497567b3b","unresolved":false,"context_lines":[{"line_number":3558,"context_line":"            LOG.exception(\"Error trying to Rescue Instance\","},{"line_number":3559,"context_line":"                          instance\u003dinstance)"},{"line_number":3560,"context_line":"            self._set_instance_obj_error_state(context, instance)"},{"line_number":3561,"context_line":"            raise exception.InstanceNotRescuable("},{"line_number":3562,"context_line":"                instance_id\u003dinstance.uuid,"},{"line_number":3563,"context_line":"                reason\u003d_(\"Driver Error: %s\") % e)"},{"line_number":3564,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_6dd24137","line":3561,"updated":"2018-01-10 19:02:57.000000000","message":"Isn\u0027t it necessary to notify this exception case?\nI am just wondering this according to\n\n :param exception: the thrown exception (used in error notifications)\n\nof the new method.","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14f1764ceb8b829c0d6a7b4ba28762e8a66e5821","unresolved":false,"context_lines":[{"line_number":3558,"context_line":"            LOG.exception(\"Error trying to Rescue Instance\","},{"line_number":3559,"context_line":"                          instance\u003dinstance)"},{"line_number":3560,"context_line":"            self._set_instance_obj_error_state(context, instance)"},{"line_number":3561,"context_line":"            raise exception.InstanceNotRescuable("},{"line_number":3562,"context_line":"                instance_id\u003dinstance.uuid,"},{"line_number":3563,"context_line":"                reason\u003d_(\"Driver Error: %s\") % e)"},{"line_number":3564,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_ec1e3e6f","line":3561,"in_reply_to":"7f96bb07_0fe1279b","updated":"2018-01-11 15:04:19.000000000","message":"I agree with Takashi. This could be a future improvement.","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1356866d2deb0128dc37f5358c6534a85eb01707","unresolved":false,"context_lines":[{"line_number":3558,"context_line":"            LOG.exception(\"Error trying to Rescue Instance\","},{"line_number":3559,"context_line":"                          instance\u003dinstance)"},{"line_number":3560,"context_line":"            self._set_instance_obj_error_state(context, instance)"},{"line_number":3561,"context_line":"            raise exception.InstanceNotRescuable("},{"line_number":3562,"context_line":"                instance_id\u003dinstance.uuid,"},{"line_number":3563,"context_line":"                reason\u003d_(\"Driver Error: %s\") % e)"},{"line_number":3564,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_0fe1279b","line":3561,"in_reply_to":"7f96bb07_6dd24137","updated":"2018-01-11 06:26:43.000000000","message":"This patch is just transformation of existing notifications.\nNew notifications will be added in another patch.","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"}],"nova/compute/utils.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"0a972414e48e6dc739535995f4000266af38c286","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    :param host: the host emitting the notification"},{"line_number":394,"context_line":"    :param action: the name of the action"},{"line_number":395,"context_line":"    :param phase: the phase of the action"},{"line_number":396,"context_line":"    :param rescue_image_ref: rescue image name"},{"line_number":397,"context_line":"    \"\"\""},{"line_number":398,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da4df55a_5f89edc9","line":396,"range":{"start_line":396,"start_character":29,"end_line":396,"end_character":46},"updated":"2016-12-22 04:43:04.000000000","message":"nit: it is an image UUID.","commit_id":"3bacc5f6f8bce8e6872f9a0eeea6c8712391dd5b"},{"author":{"_account_id":20217,"name":"Anusha Unnam","email":"anusha.unnam25@gmail.com","username":"aunnam"},"change_message_id":"aaea75ce4d9221b6969a7a5074a10e74df66ba40","unresolved":false,"context_lines":[{"line_number":399,"context_line":"    \"\"\""},{"line_number":400,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    flavor \u003d instance_notification.FlavorPayload(instance\u003dinstance)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    payload \u003d instance_notification.InstanceActionRescuePayload("},{"line_number":405,"context_line":"        instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5a3905b3_b69ff74e","line":402,"range":{"start_line":402,"start_character":4,"end_line":402,"end_character":67},"updated":"2017-01-20 22:34:06.000000000","message":"By looking at the logs, the issue is with FlavorPayload. FlavorPayload has been moved to separate file from instance.py. Since you rebased, this line is not valid now. So it is causing an error here.","commit_id":"b0100078b1cc0fcf4b53037f843f5c501c5fed6e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"897a77789926df24666ce117ee4de404b22d71e4","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    :param phase: the phase of the action"},{"line_number":379,"context_line":"    :param rescue_image_ref: rescue image name"},{"line_number":380,"context_line":"    \"\"\""},{"line_number":381,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    flavor \u003d flavor_notification.FlavorPayload(instance.flavor)"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bff0334d_dc5ef374","line":381,"range":{"start_line":381,"start_character":10,"end_line":381,"end_character":27},"updated":"2017-04-10 12:27:14.000000000","message":"This method was removed in https://review.openstack.org/#/c/418488/ .","commit_id":"72e8d065640be408d6372047b3488fce957abb08"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"897a77789926df24666ce117ee4de404b22d71e4","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    \"\"\""},{"line_number":381,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    flavor \u003d flavor_notification.FlavorPayload(instance.flavor)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    payload \u003d instance_notification.InstanceActionRescuePayload("},{"line_number":386,"context_line":"        instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":27,"id":"bff0334d_fc43f76a","line":383,"range":{"start_line":383,"start_character":0,"end_line":383,"end_character":63},"updated":"2017-04-10 12:27:14.000000000","message":"It is not necessary.\nFlavor is set in InstancePayload initialization.\n\nhttps://review.openstack.org/#/c/418488/","commit_id":"72e8d065640be408d6372047b3488fce957abb08"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"802094a0b04f695b581129fe72e3694c62f154b1","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":113,"context_line":"    fields \u003d {"},{"line_number":114,"context_line":"        \u0027rescue_image_ref\u0027: fields.StringField(nullable\u003dTrue)"},{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, instance, fault, ip_addresses, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_9d0a3a20","line":114,"range":{"start_line":114,"start_character":35,"end_line":114,"end_character":46},"updated":"2016-11-09 08:03:03.000000000","message":"It should be UUIDField.","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"1abe3dd1161f36ace6f843fa7d03b11ee52f6a68","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":113,"context_line":"    fields \u003d {"},{"line_number":114,"context_line":"        \u0027rescue_image_ref\u0027: fields.StringField(nullable\u003dTrue)"},{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, instance, fault, ip_addresses, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_7201c337","line":114,"range":{"start_line":114,"start_character":35,"end_line":114,"end_character":46},"in_reply_to":"9a629dbe_9d0a3a20","updated":"2016-11-10 16:57:13.000000000","message":"Done.","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b78c09bf7ca28b40ae2cef8e9f45c5c35e1889a4","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, instance, fault, ip_addresses, flavor,"},{"line_number":118,"context_line":"                 rescue_image_ref):"},{"line_number":119,"context_line":"        super(InstanceActionRescuePayload, self).__init__("},{"line_number":120,"context_line":"                instance\u003dinstance,"},{"line_number":121,"context_line":"                fault\u003dfault,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_679b15ca","line":118,"updated":"2016-12-09 10:45:36.000000000","message":"If the calling convention for these things is to use kwargs, and the kwargs only change a bit from class to class, is there a reason for needing an __init__? Wouldn\u0027t the init in the super be sufficient?\n\nIt looks like there\u0027s already a precedent for this, so I\u0027m not suggesting anything change, just curious about how it ended up this way.","commit_id":"60be2c16b74b3ba40ab9dedc02ce9eac42d2e179"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"be5463035ab76a9b2dc5545f7eaa80e7273ec100","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, instance, fault, ip_addresses, flavor,"},{"line_number":118,"context_line":"                 rescue_image_ref):"},{"line_number":119,"context_line":"        super(InstanceActionRescuePayload, self).__init__("},{"line_number":120,"context_line":"                instance\u003dinstance,"},{"line_number":121,"context_line":"                fault\u003dfault,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_3b94d4e0","line":118,"in_reply_to":"3a71b18c_679b15ca","updated":"2016-12-09 12:17:19.000000000","message":"Yeah, it looks weird. As far as I remember the whole thing started with InstancePayload.__init__ [1] where we have to use the passed in \u0027instance\u0027 parameter directly while other parameters should be passed forward to the VersionedObject.__init__ . When InstancePayload was created there was nothing else to pass forward to VersionedObject so having an explicit \u0027instance\u0027 parameter seemed the good choice. Then later some descendant Payload class wanted to initialize extra fields and the way to do that they had to pass the data up to the VersionedObject parent. This created the needed of the **kwargs in InstancePayload. \n\nWe could simplify the whole thing and just use **kwargs everywhere but then we would loose the information what kind of parameters are expected by the __init__ of a given payload class.\n\nAt least this is how I understand the situation.\n\n[1] https://github.com/openstack/nova/blob/master/nova/notifications/objects/instance.py#L86-L88","commit_id":"60be2c16b74b3ba40ab9dedc02ce9eac42d2e179"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"9326e8f45f08458b75bc489d612bcc70790abeda","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \u0027fault\u0027: fields.ObjectField(\u0027ExceptionPayload\u0027, nullable\u003dTrue),"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def __init__(self, instance, fault, rescue_image_ref):"},{"line_number":134,"context_line":"        super(InstanceActionPayload, self).__init__(instance\u003dinstance)"},{"line_number":135,"context_line":"        self.fault \u003d fault"},{"line_number":136,"context_line":"        self.rescue_image_ref \u003d rescue_image_ref"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff346bd7_d899be1f","line":133,"range":{"start_line":133,"start_character":39,"end_line":133,"end_character":56},"updated":"2017-07-24 12:28:23.000000000","message":"All the tests will fail, because every class which inherits from InstanceActionPayload class need to add this parameter when super\u0027s constructor is called. So I think adding a new class which inherits from InstanceActionPayload is a better way, and does not have that much impact on other codes (anyway rescue_image_ref is used only here)","commit_id":"39cc2f20ef166dd464c60ae68222eae1d5327247"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"80652bd0293eb71278fe9ce3b7fe6ce643925a7a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def __init__(self, instance, fault, rescue_image_ref\u003dNone):"},{"line_number":134,"context_line":"        super(InstanceActionPayload, self).__init__(instance\u003dinstance)"},{"line_number":135,"context_line":"        self.fault \u003d fault"},{"line_number":136,"context_line":"        self.rescue_image_ref \u003d rescue_image_ref"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff346bd7_53bad26d","line":136,"range":{"start_line":136,"start_character":13,"end_line":136,"end_character":29},"updated":"2017-07-27 10:10:22.000000000","message":"It is set here. But \u0027rescue_image_ref\u0027 field is not defined explicitly in \u0027InstanceActionPayload\u0027 class and \u0027InstancePayload\u0027 class. It should be added in fields of payload.","commit_id":"87d277f61e4d92c74dfdcb4e81f94de8dfb73359"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14f1764ceb8b829c0d6a7b4ba28762e8a66e5821","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":248,"context_line":"class InstanceActionRescuePayload(InstanceActionPayload):"},{"line_number":249,"context_line":"    # Version 1.5: Initial version. It starts at 1.5 to match with the version"},{"line_number":250,"context_line":"    #              of the InstanceActionPayload at the time when this specific"},{"line_number":251,"context_line":"    #              payload is created as a child of it so that the"},{"line_number":252,"context_line":"    #              instance.create notification using this new payload does not"},{"line_number":253,"context_line":"    #              have decreasing version."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":256,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_27451fb4","line":253,"range":{"start_line":249,"start_character":0,"end_line":253,"end_character":43},"updated":"2018-01-11 15:04:19.000000000","message":"It seems like a copy paste from InstanceCreatePayload. There we had a different case. The instance.create notification used the generic InstanceActionPayload first but then later the payload type of that notification is changed to use the extended InstanceActionPayload. So there it was important to make the new payload class\u0027 version bigger than the old payload class\u0027 version. In the other hand in this case we did not have any instance.rescue versioned notification before so it is totally OK start the version of this at 1.0","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"7f79dc451c7b44a924ba7aeac4b28d26fe0a2424","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":248,"context_line":"class InstanceActionRescuePayload(InstanceActionPayload):"},{"line_number":249,"context_line":"    # Version 1.5: Initial version. It starts at 1.5 to match with the version"},{"line_number":250,"context_line":"    #              of the InstanceActionPayload at the time when this specific"},{"line_number":251,"context_line":"    #              payload is created as a child of it so that the"},{"line_number":252,"context_line":"    #              instance.create notification using this new payload does not"},{"line_number":253,"context_line":"    #              have decreasing version."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":256,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_22e41fac","line":253,"range":{"start_line":249,"start_character":0,"end_line":253,"end_character":43},"in_reply_to":"7f96bb07_27451fb4","updated":"2018-01-12 01:23:08.000000000","message":"Done","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"942f856f92eed60c7dffaf871872905449c31794","unresolved":false,"context_lines":[{"line_number":378,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":379,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        self.api.put_server_rescue_image(server[\u0027id\u0027], rescue_image_ref)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027RESCUE\u0027)"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_0b6aa480","line":381,"range":{"start_line":381,"start_character":55,"end_line":381,"end_character":71},"updated":"2016-11-08 05:21:11.000000000","message":"I believe we need this \"put_server_rescue_image\" function but am currently getting an error message that \"rescue_image_ref\" is not defined.    Should I update nova/tests/fixtures.py by creating a new Class like how the volume_swap does?","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"062414ad792b9d42118ad47e555cb2e8c203c475","unresolved":false,"context_lines":[{"line_number":378,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":379,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        self.api.put_server_rescue_image(server[\u0027id\u0027], rescue_image_ref)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027RESCUE\u0027)"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_eeec99c9","line":381,"range":{"start_line":381,"start_character":55,"end_line":381,"end_character":71},"in_reply_to":"9a629dbe_0b6aa480","updated":"2016-11-08 08:51:32.000000000","message":"You have two ways based on the api description [1]. Either you don\u0027t pass rescue_image_ref and then the code will use CONF.rescue_image_ref or you pass an image uuid in the API and the the code will use that uuid. For the second option here is the code that works for me.\n\n-        self.api.put_server_rescue_image(server[\u0027id\u0027], rescue_image_ref)\n+        post \u003d {\n+            \u0027unshelve\u0027: {\n+                \u0027rescue_image_ref\u0027: \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027}}\n+\n+        self.api.post_server_action(server[\u0027id\u0027], post)\n\n\n[1] http://developer.openstack.org/api-ref/compute/?expanded\u003drescue-server-rescue-action-detail","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"94ce884217aa50eea915fc2727c57f9f752def23","unresolved":false,"context_lines":[{"line_number":378,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":379,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        self.api.put_server_rescue_image(server[\u0027id\u0027], rescue_image_ref)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027RESCUE\u0027)"},{"line_number":384,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a629dbe_3aba266f","line":381,"range":{"start_line":381,"start_character":55,"end_line":381,"end_character":71},"in_reply_to":"9a629dbe_eeec99c9","updated":"2016-11-08 20:33:17.000000000","message":"this is an eye-opener. Thank you for explaining on how to do this.  Fix submitted for patch 10.","commit_id":"46f38262a43ea9d1a52a6d899a8adcee165e3f59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fe06be46137ca775a14d8fcd649ab02e424dde58","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":395,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[5])"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def test_rescue_server(self):"},{"line_number":398,"context_line":"        server \u003d self._boot_a_server("},{"line_number":399,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":400,"context_line":"                         [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_5eb8092b","line":397,"updated":"2016-11-29 16:40:29.000000000","message":"I think we can put this into the test_instance_action test case as a step just have to make sure that we unrescue the instance after this step. What is the reason you put this as a separate test case?","commit_id":"44472ef88c62d4696f33b7530ad2a968e5609f63"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c7d3e8b05edaeadaf8c8be0604a02c54dde59555","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":395,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[5])"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def test_rescue_server(self):"},{"line_number":398,"context_line":"        server \u003d self._boot_a_server("},{"line_number":399,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":400,"context_line":"                         [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a74a57a_1d8125fc","line":397,"in_reply_to":"5a74a57a_5eb8092b","updated":"2016-11-30 01:23:18.000000000","message":"I was under the impression that the test_instance_action makes functional calls to notifications with no extra_params.  However, I have made the changes as you suggested (see patch 17).","commit_id":"44472ef88c62d4696f33b7530ad2a968e5609f63"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"c6214ca2a8a814cb3224f282cfdf41af1f91eb43","unresolved":false,"context_lines":[{"line_number":395,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":396,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[5])"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _test_rescue_server(self, server):"},{"line_number":399,"context_line":"        post \u003d {\"rescue\":"},{"line_number":400,"context_line":"                {\"rescue_image_ref\": \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027}}"},{"line_number":401,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a74a57a_1dd045c9","line":398,"range":{"start_line":398,"start_character":8,"end_line":398,"end_character":27},"updated":"2016-11-30 01:31:07.000000000","message":"this function is now included in the test_instance_action per suggestion.  Renamed the function to \"_test_rescue_server\" in keeping with the function naming pattern.","commit_id":"ee1749f344b57411aa1768d6f56d1daf262daf8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cca523e543c5552ae5b77c3349ec8c7a6ce1f384","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            self._test_rescue_server,"},{"line_number":77,"context_line":"            self._test_snapshot_server,"},{"line_number":78,"context_line":"            self._test_rebuild_server,"},{"line_number":79,"context_line":"            self._test_resize_server,"},{"line_number":80,"context_line":"        ]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        for action in actions:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a1ced50_c3c5f75b","line":79,"updated":"2017-03-17 10:56:14.000000000","message":"Is there a specific reason why you reordered the calls? It seems that this unnecessary changes the resize samples.","commit_id":"987dc2577bfe902530454a7a7dd74b2e4f9c5dce"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"b218eebf3eacf37528ff870bbc79510f00eef083","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            self._test_rescue_server,"},{"line_number":77,"context_line":"            self._test_snapshot_server,"},{"line_number":78,"context_line":"            self._test_rebuild_server,"},{"line_number":79,"context_line":"            self._test_resize_server,"},{"line_number":80,"context_line":"        ]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        for action in actions:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a1ced50_c46fb390","line":79,"in_reply_to":"1a1ced50_c3c5f75b","updated":"2017-04-07 22:52:15.000000000","message":"Hi, reordering the _test_resize_server call was done earlier in Patch 5.  However, I ensured that I made the same changes to the resize samples in the following commits:\n\nresize_revert  https://review.openstack.org/#/c/396811/\nresize_confirm https://review.openstack.org/#/c/390654/\n\n\nInput appreciated.  Thank you.","commit_id":"987dc2577bfe902530454a7a7dd74b2e4f9c5dce"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"72fe40390725d8756fb19a12982106099f2dc583","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":811,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"    def _test_rescue_unrescue_server(self, server):"},{"line_number":814,"context_line":"        post \u003d {\"rescue\":"},{"line_number":815,"context_line":"                {\"rescue_image_ref\": \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027}}"},{"line_number":816,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_98c4fb92","line":813,"range":{"start_line":813,"start_character":0,"end_line":813,"end_character":51},"updated":"2017-05-10 21:47:45.000000000","message":"As you had suggested, I went ahead and merged the rescue and unrescue test functions into one function.","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ebdf4edef98db8613beefd7f82bbe8b6f0fc3322","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                {\"rescue_image_ref\": \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027}}"},{"line_number":816,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":817,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027RESCUE\u0027)"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        post \u003d {\u0027unrescue\u0027: None}"},{"line_number":820,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"},{"line_number":821,"context_line":"        self._wait_for_state_change(self.admin_api, server, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_3991664f","line":818,"updated":"2017-05-11 07:57:15.000000000","message":"It could be made the test a bit more specific if you had moved the assert of the rescue notifications here as that would show the those notifications are already emitted after the rescue action.","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"e84c04026950ad6ebb91c2034a731be8db6d1353","unresolved":false,"context_lines":[{"line_number":2213,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":2214,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2215,"context_line":"                      action\u003d\u0027rescue\u0027, phase\u003d\u0027start\u0027,"},{"line_number":2216,"context_line":"                      rescue_image_ref\u003duuids.fake_image_ref_1),"},{"line_number":2217,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2218,"context_line":"                      action\u003d\u0027rescue\u0027, phase\u003d\u0027end\u0027,"},{"line_number":2219,"context_line":"                      rescue_image_ref\u003duuids.fake_image_ref_1)])"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ba4556b4","line":2216,"range":{"start_line":2216,"start_character":0,"end_line":2216,"end_character":63},"updated":"2016-11-08 21:23:22.000000000","message":"my unit test was failing for test_compute in patch 10.  I checked the error and it reported that the expected call was NOT passing the rescue_image_ref vs the actual call which did. \n\nSince rescue_image_ref is an extended property I think it\u0027d be proper to add the rescue_image_ref in the parameter for the mock call.  Reran the test and now the expected call matches the actual call.   I hope my assessment is correct.","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"e84c04026950ad6ebb91c2034a731be8db6d1353","unresolved":false,"context_lines":[{"line_number":2216,"context_line":"                      rescue_image_ref\u003duuids.fake_image_ref_1),"},{"line_number":2217,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2218,"context_line":"                      action\u003d\u0027rescue\u0027, phase\u003d\u0027end\u0027,"},{"line_number":2219,"context_line":"                      rescue_image_ref\u003duuids.fake_image_ref_1)])"},{"line_number":2220,"context_line":""},{"line_number":2221,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2222,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_1a0d6290","line":2219,"range":{"start_line":2219,"start_character":1,"end_line":2219,"end_character":61},"updated":"2016-11-08 21:23:22.000000000","message":"ditto","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ec9b68c24f8c4ddbca16b88ac489bd8ecea4eacf","unresolved":false,"context_lines":[{"line_number":2258,"context_line":"                                  \u0027compute.instance.unrescue.end\u0027]"},{"line_number":2259,"context_line":"        self.assertEqual([m.event_type for m in fake_notifier.NOTIFICATIONS],"},{"line_number":2260,"context_line":"                         expected_notifications)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2263,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"},{"line_number":2264,"context_line":"            self.assertEqual(msg.priority, \u0027INFO\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a629dbe_7bb265e6","line":2261,"updated":"2016-11-11 09:30:55.000000000","message":"nit: seems like an unnecessary change","commit_id":"88f7a749aca6fefe4f12f88fea38b8138bca65d1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9360677475ecd923562914521ed20878d655770d","unresolved":false,"context_lines":[{"line_number":2259,"context_line":"                                  \u0027compute.instance.unrescue.end\u0027]"},{"line_number":2260,"context_line":"        self.assertEqual([m.event_type for m in fake_notifier.NOTIFICATIONS],"},{"line_number":2261,"context_line":"                         expected_notifications)"},{"line_number":2262,"context_line":""},{"line_number":2263,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2264,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"},{"line_number":2265,"context_line":"            self.assertEqual(msg.priority, \u0027INFO\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a74a57a_381c1c77","line":2262,"updated":"2016-11-30 11:20:33.000000000","message":"seems like an unnecessary change","commit_id":"ee1749f344b57411aa1768d6f56d1daf262daf8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5590521ba8d8fafcd6cd2617d83992cc35076508","unresolved":false,"context_lines":[{"line_number":2262,"context_line":"                                  \u0027compute.instance.unrescue.end\u0027]"},{"line_number":2263,"context_line":"        self.assertEqual([m.event_type for m in fake_notifier.NOTIFICATIONS],"},{"line_number":2264,"context_line":"                         expected_notifications)"},{"line_number":2265,"context_line":""},{"line_number":2266,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2267,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"},{"line_number":2268,"context_line":"            self.assertEqual(msg.priority, \u0027INFO\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_57607e35","line":2265,"updated":"2016-12-20 19:15:24.000000000","message":"nit: seems like an unnecessary change","commit_id":"3bacc5f6f8bce8e6872f9a0eeea6c8712391dd5b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"cca523e543c5552ae5b77c3349ec8c7a6ce1f384","unresolved":false,"context_lines":[{"line_number":2340,"context_line":"                                  \u0027compute.instance.unrescue.end\u0027]"},{"line_number":2341,"context_line":"        self.assertEqual([m.event_type for m in fake_notifier.NOTIFICATIONS],"},{"line_number":2342,"context_line":"                         expected_notifications)"},{"line_number":2343,"context_line":""},{"line_number":2344,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2345,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"},{"line_number":2346,"context_line":"            self.assertEqual(msg.priority, \u0027INFO\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a1ced50_a3f1dbcf","line":2343,"updated":"2017-03-17 10:56:14.000000000","message":"nit: unnecessary change","commit_id":"987dc2577bfe902530454a7a7dd74b2e4f9c5dce"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a24975bf95d1e38b9b53affff9ea246ade4de0a","unresolved":false,"context_lines":[{"line_number":2392,"context_line":"                                  \u0027compute.instance.unrescue.end\u0027]"},{"line_number":2393,"context_line":"        self.assertEqual([m.event_type for m in fake_notifier.NOTIFICATIONS],"},{"line_number":2394,"context_line":"                         expected_notifications)"},{"line_number":2395,"context_line":""},{"line_number":2396,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2397,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"},{"line_number":2398,"context_line":"            self.assertEqual(msg.priority, \u0027INFO\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f044301_47f8dd47","line":2395,"updated":"2017-05-10 13:55:54.000000000","message":"Looks like an unnecessary change","commit_id":"9bad24d6d712ab00f8a6363e0ae4a58a6d73f313"},{"author":{"_account_id":18603,"name":"Béla Vancsics","email":"vancsics@inf.u-szeged.hu","username":"vancsics"},"change_message_id":"8ddcdd87639125d591f2c577fafc90c9b68690cf","unresolved":false,"context_lines":[{"line_number":2351,"context_line":"                         expected_notifications)"},{"line_number":2352,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":2353,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2354,"context_line":"                      action\u003d\u0027rescue\u0027,phase\u003d\u0027start\u0027),"},{"line_number":2355,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2356,"context_line":"                      action\u003d\u0027rescue\u0027,phase\u003d\u0027end\u0027)])"},{"line_number":2357,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_42c83554","line":2354,"range":{"start_line":2354,"start_character":37,"end_line":2354,"end_character":38},"updated":"2017-06-21 07:24:05.000000000","message":"pep8: missing whitespace after \u0027,\u0027","commit_id":"835804c89c176067e0c7cf86dcf6e0d9c8ca36c3"},{"author":{"_account_id":18603,"name":"Béla Vancsics","email":"vancsics@inf.u-szeged.hu","username":"vancsics"},"change_message_id":"8ddcdd87639125d591f2c577fafc90c9b68690cf","unresolved":false,"context_lines":[{"line_number":2353,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2354,"context_line":"                      action\u003d\u0027rescue\u0027,phase\u003d\u0027start\u0027),"},{"line_number":2355,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2356,"context_line":"                      action\u003d\u0027rescue\u0027,phase\u003d\u0027end\u0027)])"},{"line_number":2357,"context_line":""},{"line_number":2358,"context_line":"        for n, msg in enumerate(fake_notifier.NOTIFICATIONS):"},{"line_number":2359,"context_line":"            self.assertEqual(msg.event_type, expected_notifications[n])"}],"source_content_type":"text/x-python","patch_set":37,"id":"5f201791_02c23d34","line":2356,"range":{"start_line":2356,"start_character":37,"end_line":2356,"end_character":38},"updated":"2017-06-21 07:24:05.000000000","message":"pep8: missing whitespace after \u0027,\u0027","commit_id":"835804c89c176067e0c7cf86dcf6e0d9c8ca36c3"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"802094a0b04f695b581129fe72e3694c62f154b1","unresolved":false,"context_lines":[{"line_number":2567,"context_line":"            instance_save.assert_called_once_with("},{"line_number":2568,"context_line":"                expected_task_state\u003dtask_states.RESCUING)"},{"line_number":2569,"context_line":""},{"line_number":2570,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2571,"context_line":"    def test_rescue(self, mock_notify):"},{"line_number":2572,"context_line":"        self._test_rescue()"},{"line_number":2573,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_ba02a46d","line":2570,"range":{"start_line":2570,"start_character":0,"end_line":2570,"end_character":66},"updated":"2016-11-09 08:03:03.000000000","message":"This line can be moved to the \u0027_test_rescue\u0027 method(line2505).\n\n    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)\n    def _test_rescue(self, mock_notify, clean_shutdown\u003dTrue):","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"1abe3dd1161f36ace6f843fa7d03b11ee52f6a68","unresolved":false,"context_lines":[{"line_number":2567,"context_line":"            instance_save.assert_called_once_with("},{"line_number":2568,"context_line":"                expected_task_state\u003dtask_states.RESCUING)"},{"line_number":2569,"context_line":""},{"line_number":2570,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2571,"context_line":"    def test_rescue(self, mock_notify):"},{"line_number":2572,"context_line":"        self._test_rescue()"},{"line_number":2573,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_d289af27","line":2570,"range":{"start_line":2570,"start_character":0,"end_line":2570,"end_character":66},"in_reply_to":"9a629dbe_ba02a46d","updated":"2016-11-10 16:57:13.000000000","message":"Making this change causes an error:\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n    TypeError: test_rescue() takes exactly 2 arguments (1 given)\n\nSo I am keeping the original code here as is.\n\n\nI am","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"802094a0b04f695b581129fe72e3694c62f154b1","unresolved":false,"context_lines":[{"line_number":2571,"context_line":"    def test_rescue(self, mock_notify):"},{"line_number":2572,"context_line":"        self._test_rescue()"},{"line_number":2573,"context_line":""},{"line_number":2574,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2575,"context_line":"    def test_rescue_forced_shutdown(self, mock_notify):"},{"line_number":2576,"context_line":"        self._test_rescue(clean_shutdown\u003dFalse)"},{"line_number":2577,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_9ae96083","line":2574,"range":{"start_line":2574,"start_character":0,"end_line":2574,"end_character":66},"updated":"2016-11-09 08:03:03.000000000","message":"ditto","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"1abe3dd1161f36ace6f843fa7d03b11ee52f6a68","unresolved":false,"context_lines":[{"line_number":2571,"context_line":"    def test_rescue(self, mock_notify):"},{"line_number":2572,"context_line":"        self._test_rescue()"},{"line_number":2573,"context_line":""},{"line_number":2574,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2575,"context_line":"    def test_rescue_forced_shutdown(self, mock_notify):"},{"line_number":2576,"context_line":"        self._test_rescue(clean_shutdown\u003dFalse)"},{"line_number":2577,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a629dbe_329cab5c","line":2574,"range":{"start_line":2574,"start_character":0,"end_line":2574,"end_character":66},"in_reply_to":"9a629dbe_9ae96083","updated":"2016-11-10 16:57:13.000000000","message":"same as above reply.","commit_id":"3cf9841ee6e1377d6ffc4b0ff845e0bd67446268"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a24975bf95d1e38b9b53affff9ea246ade4de0a","unresolved":false,"context_lines":[{"line_number":2538,"context_line":"                                     notify_inst_usage, bdm_get,"},{"line_number":2539,"context_line":"                                     expected\u003dNone):"},{"line_number":2540,"context_line":"        \"\"\"Re-usable code for detach volume evacuate test cases."},{"line_number":2541,"context_line":""},{"line_number":2542,"context_line":"        :param conn_info_str: String form of the stashed connector."},{"line_number":2543,"context_line":"        :param expected: Dict of the connector that is expected in the"},{"line_number":2544,"context_line":"                         terminate call (optional). Default is to expect the"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f044301_079c150d","side":"PARENT","line":2541,"updated":"2017-05-10 13:55:54.000000000","message":"Looks like an unnecessary change","commit_id":"5532d6f4042aa41d1bd9e2e4a7fabb63a0ab6b93"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a24975bf95d1e38b9b53affff9ea246ade4de0a","unresolved":false,"context_lines":[{"line_number":2593,"context_line":"                ])"},{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2596,"context_line":"    def _test_rescue(self, mock_notify, clean_shutdown\u003dTrue):"},{"line_number":2597,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":2598,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE)"},{"line_number":2599,"context_line":"        fake_nw_info \u003d network_model.NetworkInfo()"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f044301_e7b5a97f","line":2596,"updated":"2017-05-10 13:55:54.000000000","message":"You could even assert if the proper notification is emitted during the test.","commit_id":"9bad24d6d712ab00f8a6363e0ae4a58a6d73f313"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"72fe40390725d8756fb19a12982106099f2dc583","unresolved":false,"context_lines":[{"line_number":2593,"context_line":"                ])"},{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2596,"context_line":"    def _test_rescue(self, mock_notify, clean_shutdown\u003dTrue):"},{"line_number":2597,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":2598,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE)"},{"line_number":2599,"context_line":"        fake_nw_info \u003d network_model.NetworkInfo()"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_f8c9bfab","line":2596,"range":{"start_line":2596,"start_character":3,"end_line":2596,"end_character":61},"updated":"2017-05-10 21:47:45.000000000","message":"hi gibi, would like to request your input regarding \"asserting if proper notification is emitted\" here.  Thank you.","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ebdf4edef98db8613beefd7f82bbe8b6f0fc3322","unresolved":false,"context_lines":[{"line_number":2593,"context_line":"                ])"},{"line_number":2594,"context_line":""},{"line_number":2595,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_rescue_instance\u0027)"},{"line_number":2596,"context_line":"    def _test_rescue(self, mock_notify, clean_shutdown\u003dTrue):"},{"line_number":2597,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":2598,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE)"},{"line_number":2599,"context_line":"        fake_nw_info \u003d network_model.NetworkInfo()"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_d97f2213","line":2596,"range":{"start_line":2596,"start_character":3,"end_line":2596,"end_character":61},"in_reply_to":"3f044301_f8c9bfab","updated":"2017-05-11 07:57:15.000000000","message":"See below at the next comment","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"72fe40390725d8756fb19a12982106099f2dc583","unresolved":false,"context_lines":[{"line_number":2634,"context_line":"                self.context, instance, None)"},{"line_number":2635,"context_line":""},{"line_number":2636,"context_line":"            extra_usage_info \u003d {\u0027rescue_image_name\u0027: uuids.image_name}"},{"line_number":2637,"context_line":"            notify_calls \u003d ["},{"line_number":2638,"context_line":"                mock.call(self.context, instance, \"rescue.start\","},{"line_number":2639,"context_line":"                          extra_usage_info\u003dextra_usage_info,"},{"line_number":2640,"context_line":"                          network_info\u003dfake_nw_info),"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_d8a16348","line":2637,"range":{"start_line":2637,"start_character":2,"end_line":2637,"end_character":28},"updated":"2017-05-10 21:47:45.000000000","message":"I suppose this is where the notify assertion is made?","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f284d2f61fdf99644e5cd9080b431437bb14aa1c","unresolved":false,"context_lines":[{"line_number":2634,"context_line":"                self.context, instance, None)"},{"line_number":2635,"context_line":""},{"line_number":2636,"context_line":"            extra_usage_info \u003d {\u0027rescue_image_name\u0027: uuids.image_name}"},{"line_number":2637,"context_line":"            notify_calls \u003d ["},{"line_number":2638,"context_line":"                mock.call(self.context, instance, \"rescue.start\","},{"line_number":2639,"context_line":"                          extra_usage_info\u003dextra_usage_info,"},{"line_number":2640,"context_line":"                          network_info\u003dfake_nw_info),"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f044301_99ee3aeb","line":2637,"range":{"start_line":2637,"start_character":2,"end_line":2637,"end_character":28},"in_reply_to":"3f044301_d8a16348","updated":"2017-05-11 07:51:39.000000000","message":"This and the notify_instance_usage.assert_has_calls(notify_calls) call assert the legacy notification. You mocked the function notify_about_rescue_instance() with mock_notify in this patch with a decorator  at L2595. So it would be logical to see if that mock_notify is called during the test","commit_id":"bfe39f1d65cf1e3def69acd4ddc5935ccaddcc7c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5c8c2d906bf85da826605bc3eac5e771cff88fa6","unresolved":false,"context_lines":[{"line_number":2656,"context_line":""},{"line_number":2657,"context_line":"            mock_notify.assert_has_calls(["},{"line_number":2658,"context_line":"                mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2659,"context_line":"                      action\u003d\u0027rescue\u0027, phase\u003d\u0027start\u0027, rescue_image_ref\u003dNone),"},{"line_number":2660,"context_line":"                mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":2661,"context_line":"                      action\u003d\u0027rescue\u0027, phase\u003d\u0027end\u0027, rescue_image_ref\u003dNone)])"},{"line_number":2662,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"1f013ff3_28e98b19","line":2659,"range":{"start_line":2659,"start_character":71,"end_line":2659,"end_character":75},"updated":"2017-05-15 15:16:31.000000000","message":"It would be nicer to have the test set up in a way that it rescues a VM with another image at L2621 to see that the image ref is passed to the notification but the current scenario is also a valid use case.","commit_id":"8885b40bbf61465a4aa3038d497ccf32eb69770a"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"3f989d8654147f6af5ea41ecf7e2a27644ac7a81","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    \u0027FlavorPayload\u0027: \u00271.0-8ad962ab0bafc7270f474c7dda0b7c20\u0027,"},{"line_number":266,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":267,"context_line":"    \u0027InstanceActionRescueNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":268,"context_line":"    \u0027InstanceActionRescuePayload\u0027: \"\","},{"line_number":269,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-d94994d6043bb87fde603976ce811cba\u0027,"},{"line_number":270,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":271,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_42bb58e5","line":268,"range":{"start_line":268,"start_character":0,"end_line":268,"end_character":38},"updated":"2016-11-01 01:39:28.000000000","message":"How do we generate the hash value here?","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bd1532472a1471fc0fda23f53cf9adcb1e771d46","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    \u0027FlavorPayload\u0027: \u00271.0-8ad962ab0bafc7270f474c7dda0b7c20\u0027,"},{"line_number":266,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":267,"context_line":"    \u0027InstanceActionRescueNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":268,"context_line":"    \u0027InstanceActionRescuePayload\u0027: \"\","},{"line_number":269,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-d94994d6043bb87fde603976ce811cba\u0027,"},{"line_number":270,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":271,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5da102_11b589cf","line":268,"range":{"start_line":268,"start_character":0,"end_line":268,"end_character":38},"in_reply_to":"ba5da102_42bb58e5","updated":"2016-11-04 16:44:03.000000000","message":"When you round your unit test it will fail and it will tell you what is the expected hash, just copy past that here. http://logs.openstack.org/44/385644/6/check/gate-nova-python27-db-ubuntu-xenial/1a3611c/console.html#_2016-11-01_01_47_50_140704","commit_id":"71f78b41932a2b5e6f199a7fbb25eb22a9e9be9b"},{"author":{"_account_id":21111,"name":"STEW TY","email":"punsoca@gmail.com","username":"stewie925"},"change_message_id":"17e94e91c66202cd48566b52b18bbaefab19aa37","unresolved":false,"context_lines":[{"line_number":265,"context_line":"    \u0027FlavorPayload\u0027: \u00271.0-8ad962ab0bafc7270f474c7dda0b7c20\u0027,"},{"line_number":266,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":267,"context_line":"    \u0027InstanceActionRescueNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":268,"context_line":"    \u0027InstanceActionRescuePayload\u0027: \"1.0-f2579f7ac1bc62fab848c47872c3c61b\","},{"line_number":269,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-d94994d6043bb87fde603976ce811cba\u0027,"},{"line_number":270,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":271,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a629dbe_91056712","line":268,"range":{"start_line":268,"start_character":36,"end_line":268,"end_character":72},"updated":"2016-11-11 00:35:20.000000000","message":"this value is set based on the expected value provided by the unit test result.","commit_id":"88f7a749aca6fefe4f12f88fea38b8138bca65d1"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"48c69f72146c2d20b1adf3852b16e3e6e286f099","unresolved":false,"context_lines":[{"line_number":357,"context_line":"    \u0027FlavorNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":358,"context_line":"    \u0027FlavorPayload\u0027: \u00271.3-6335e626893d7df5f96f87e6731fef56\u0027,"},{"line_number":359,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":360,"context_line":"    \u0027InstanceActionRescueNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":361,"context_line":"    \u0027InstanceActionRescuePayload\u0027: \"1.0-5660107bfc7093638773ff95041565b2\","},{"line_number":362,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.2-b7b2481bcd0e1edcc1970ef7150df5aa\u0027,"},{"line_number":363,"context_line":"    \u0027InstanceActionVolumeNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":364,"context_line":"    \u0027InstanceActionVolumePayload\u0027: \u00271.0-20c0dca4cfaf1a68d3e8c45e5aca3907\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"1f013ff3_1035bf46","line":361,"range":{"start_line":360,"start_character":0,"end_line":361,"end_character":74},"updated":"2017-05-16 09:31:36.000000000","message":"nit: In alphabetical order, they should be after \u0027InstanceActionPayload\u0027.","commit_id":"8885b40bbf61465a4aa3038d497ccf32eb69770a"}],"nova/virt/fake.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14f1764ceb8b829c0d6a7b4ba28762e8a66e5821","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        pass"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def unrescue(self, instance, network_info):"},{"line_number":228,"context_line":"        self.instances[instance.uuid].state \u003d power_state.RUNNING"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def poll_rebooting_instances(self, timeout, instances):"},{"line_number":231,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":41,"id":"7f96bb07_42737981","line":228,"updated":"2018-01-11 15:04:19.000000000","message":"+1","commit_id":"9d1047681b2ff7e61e45eb1878cc8f3c487ba8ba"}]}
