)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e77eac98253be7d68e997e9d8794b2a85e81a5cc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Transform instance.volume_attach notification"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie10b3476c1d7cffeeb55d63cc8d9f2a166ec1109"},{"line_number":10,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"fa31d9ce_c4cf0454","line":10,"updated":"2017-02-15 11:45:59.000000000","message":"if you have to respin the patch then please change this to versioned-notification-transformation-pike","commit_id":"42ae603a4427be6eb2a97e984d60775342dbf4e1"}],"doc/notification_samples/instance-volume_attach-end.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"metadata\": {},"},{"line_number":54,"context_line":"            \"locked\":false,"},{"line_number":55,"context_line":"            \"node\": \"fake-mini\","},{"line_number":56,"context_line":"            \"volume_id\": \"a07f71dc-8151-4e7d-a0cc-cd24a3f11113\","},{"line_number":57,"context_line":"            \"os_type\": null,"},{"line_number":58,"context_line":"            \"power_state\":\"running\","},{"line_number":59,"context_line":"            \"progress\": 0,"}],"source_content_type":"application/json","patch_set":49,"id":"5ff73747_abd00855","line":56,"updated":"2017-05-02 19:24:51.000000000","message":"It seems sort of odd that we don\u0027t have a BDM representation in here so we could have more details about the type of attachment, i.e. is it dest\u003dlocal or volume, or source\u003dimage/volume/snapshot/blank? What\u0027s the guest_format and device name, etc. I guess that\u0027s all that\u0027s in the existing compute.instance.volume.attach notification so this isn\u0027t any worse, and we could build on it later if needed. It just seems sort of weird what we put into the notification payloads (like flavors and network info) and things we leave out (bdm in this case) based on the operation.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53be82535e37edd30bdf9901937bf96de67ce56c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"metadata\": {},"},{"line_number":54,"context_line":"            \"locked\":false,"},{"line_number":55,"context_line":"            \"node\": \"fake-mini\","},{"line_number":56,"context_line":"            \"volume_id\": \"a07f71dc-8151-4e7d-a0cc-cd24a3f11113\","},{"line_number":57,"context_line":"            \"os_type\": null,"},{"line_number":58,"context_line":"            \"power_state\":\"running\","},{"line_number":59,"context_line":"            \"progress\": 0,"}],"source_content_type":"application/json","patch_set":49,"id":"5ff73747_be027a08","line":56,"in_reply_to":"5ff73747_abd00855","updated":"2017-05-03 07:52:51.000000000","message":"Yes it seams quite random what we include and what we don\u0027t in the payload. The main goal of his patch is to define and version what we have in the legacy notification (even if that is a bit random today). This will allow us later to evolve this API in a manageable way. It is tempting to solve everything at once but 1) we don\u0027t have bandwidth for everything, 2) I think all of this notification API evolution should be driven by consumer needs not just the artistic needs of nova developers. \nFor example Searchlight needs the BDM object so it will be added to every instance.action payload in [1] .\n\nNow it is a question that we need both the volume_id added in this patch and then the list of BDMs added in [1]. Is this now a natural API evolution we see or we simply stupid enough to duplicate the information? I don\u0027t know. I feel I can be convinced about both.\n\n[1]https://review.openstack.org/#/c/448779/","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c10a7e490dcfc0e287df349a2824019ab1682fc","unresolved":false,"context_lines":[{"line_number":4758,"context_line":"        do_attach_volume(context, instance, driver_bdm)"},{"line_number":4759,"context_line":""},{"line_number":4760,"context_line":"    def _attach_volume(self, context, instance, bdm):"},{"line_number":4761,"context_line":"        context \u003d context.elevated()"},{"line_number":4762,"context_line":"        LOG.info(_LI(\u0027Attaching volume %(volume_id)s to %(mountpoint)s\u0027),"},{"line_number":4763,"context_line":"                  {\u0027volume_id\u0027: bdm.volume_id,"},{"line_number":4764,"context_line":"                  \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_708e9f28","line":4761,"updated":"2016-11-30 15:19:16.000000000","message":"Most probably this is why your unit test fails if you compare the context that passed in with the context passed to the notify_about_volume_attach_detach()\n\nso you have to mock the elevated() function of the context to control the value that is passed to notify_about_volume_attach_detach","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a87c9bed7345fc19de93e989fe05e0acba30349c","unresolved":false,"context_lines":[{"line_number":4812,"context_line":"        compute_utils.notify_about_volume_attach_detach("},{"line_number":4813,"context_line":"            context, instance, self.host,"},{"line_number":4814,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4815,"context_line":"            volume_id\u003dbdm.volume_id)"},{"line_number":4816,"context_line":""},{"line_number":4817,"context_line":"    def _driver_detach_volume(self, context, instance, bdm, connection_info):"},{"line_number":4818,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a1ced50_c4517364","line":4815,"updated":"2017-03-17 17:00:34.000000000","message":"Perhaps it would be worth aligning volume attach with the reboot action and having a start, end, and error event state for instance.volume_attach?","commit_id":"0adfe7abeabbb8350b3af93543b58b3d3f11c3da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a7e4940aabfde9e9951620a85ddd3565b65ce95","unresolved":false,"context_lines":[{"line_number":4812,"context_line":"        compute_utils.notify_about_volume_attach_detach("},{"line_number":4813,"context_line":"            context, instance, self.host,"},{"line_number":4814,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4815,"context_line":"            volume_id\u003dbdm.volume_id)"},{"line_number":4816,"context_line":""},{"line_number":4817,"context_line":"    def _driver_detach_volume(self, context, instance, bdm, connection_info):"},{"line_number":4818,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a1ced50_d871e2a9","line":4815,"in_reply_to":"1a1ced50_7102d10c","updated":"2017-03-21 17:12:11.000000000","message":"I agree with Jay, and discussed with gibi in today\u0027s notifications meeting. Since we\u0027re doing the work here anyway, we should make this better by making it more granular wrt the states, so start/end/error sounds good to me. It\u0027s more work, but it\u0027d be better to do that now than later IMO.","commit_id":"0adfe7abeabbb8350b3af93543b58b3d3f11c3da"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b3943af7e7d7fc0f7979228d9e35b97ed186fc4f","unresolved":false,"context_lines":[{"line_number":4812,"context_line":"        compute_utils.notify_about_volume_attach_detach("},{"line_number":4813,"context_line":"            context, instance, self.host,"},{"line_number":4814,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4815,"context_line":"            volume_id\u003dbdm.volume_id)"},{"line_number":4816,"context_line":""},{"line_number":4817,"context_line":"    def _driver_detach_volume(self, context, instance, bdm, connection_info):"},{"line_number":4818,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"1a1ced50_7102d10c","line":4815,"in_reply_to":"1a1ced50_c4517364","updated":"2017-03-21 16:00:58.000000000","message":"Yeah, for me it is always a balance between a pure transformation of the notification from legacy to versioned and a desire to make the whole notification interface consistent and usable as I free we cannot do both with the current review bandwidth.\n\nYour suggestion totally make sense as an end goal. If this additional enhancement does not take away the focus from the transformation work then it is totally OK to me. \n\nHowever I suggest to split the work to multiple patches to limit the size of the change. This patch could add volume_attach.end in the current place and volume_attach.start before the bdm.attach call. Then a subsequent patch could add volume_attach.error to the except block. Then do the same thing for volume_detach case in other patches.","commit_id":"0adfe7abeabbb8350b3af93543b58b3d3f11c3da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f94a5f8400c9ca28467df49f1e7cb90d3423457d","unresolved":false,"context_lines":[{"line_number":4834,"context_line":"            context, instance, self.host,"},{"line_number":4835,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4836,"context_line":"            phase\u003dfields.NotificationPhase.END,"},{"line_number":4837,"context_line":"            volume_id\u003dbdm.volume_id)"},{"line_number":4838,"context_line":""},{"line_number":4839,"context_line":"    def _driver_detach_volume(self, context, instance, bdm, connection_info):"},{"line_number":4840,"context_line":"        \"\"\"Do the actual driver detach using block device mapping.\"\"\""}],"source_content_type":"text/x-python","patch_set":32,"id":"ffe62b97_6e1d0a0e","line":4837,"updated":"2017-03-27 17:29:21.000000000","message":"++ nice. thanks for changing this to align with the instance events.","commit_id":"1f10f6395f7ed2d9f9e5da2460bf3c5f49d00b7a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":4459,"context_line":""},{"line_number":4460,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":4461,"context_line":"                context, instance.uuid)"},{"line_number":4462,"context_line":"        block_device_info \u003d self._prep_block_device(context, instance, bdms)"},{"line_number":4463,"context_line":"        scrubbed_keys \u003d self._unshelve_instance_key_scrub(instance)"},{"line_number":4464,"context_line":""},{"line_number":4465,"context_line":"        if node is None:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_ebee10ec","line":4462,"range":{"start_line":4462,"start_character":33,"end_line":4462,"end_character":51},"updated":"2017-05-02 19:24:51.000000000","message":"This is where we\u0027d attach volumes to a guest that was shelved-offloaded when the volumes were attached in the API. I guess we have different basic notifications for unshelve which don\u0027t take into account the bdms.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53be82535e37edd30bdf9901937bf96de67ce56c","unresolved":false,"context_lines":[{"line_number":4459,"context_line":""},{"line_number":4460,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":4461,"context_line":"                context, instance.uuid)"},{"line_number":4462,"context_line":"        block_device_info \u003d self._prep_block_device(context, instance, bdms)"},{"line_number":4463,"context_line":"        scrubbed_keys \u003d self._unshelve_instance_key_scrub(instance)"},{"line_number":4464,"context_line":""},{"line_number":4465,"context_line":"        if node is None:"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_9efe9e69","line":4462,"range":{"start_line":4462,"start_character":33,"end_line":4462,"end_character":51},"in_reply_to":"5ff73747_ebee10ec","updated":"2017-05-03 07:52:51.000000000","message":"As currently proposed BDM will be part of every instance.\u003caction\u003e, See https://review.openstack.org/#/c/448779/ . This means the instance.unshelve will send BDMs as well.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":4811,"context_line":"                  {\u0027volume_id\u0027: bdm.volume_id,"},{"line_number":4812,"context_line":"                  \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4813,"context_line":"                 instance\u003dinstance)"},{"line_number":4814,"context_line":"        compute_utils.notify_about_volume_attach_detach("},{"line_number":4815,"context_line":"            context, instance, self.host,"},{"line_number":4816,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4817,"context_line":"            phase\u003dfields.NotificationPhase.START,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_6b0d60e7","line":4814,"updated":"2017-05-02 19:24:51.000000000","message":"Shouldn\u0027t this happen in the compute API before we do the RPC cast to the compute?\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3706\n\nThere is also such a thing as attaching a volume to a shelved offloaded instance, which \u0027attaches\u0027 it in the API by linking up the instance and the volume in the nova and cinder databases:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3770\n\nBut it doesn\u0027t actually attach the volume to the guest until the instance is unshelved.\n\nIf we\u0027re just following the existing compute.instance.volume.attach notification, then this is probably OK, but the attach really starts in the API and ends in the compute. Do we do any other start notifications for operations in the API and do the end in the compute? We also don\u0027t set the task_state on the instance in the API when attaching a volume so we wouldn\u0027t get an instance.update notification either.\n\nLooking at things like pause.start and pause.end, those are done in the compute, so I guess doing volume.attach.start and volume.attach.end like that is consistent.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53be82535e37edd30bdf9901937bf96de67ce56c","unresolved":false,"context_lines":[{"line_number":4811,"context_line":"                  {\u0027volume_id\u0027: bdm.volume_id,"},{"line_number":4812,"context_line":"                  \u0027mountpoint\u0027: bdm[\u0027mount_device\u0027]},"},{"line_number":4813,"context_line":"                 instance\u003dinstance)"},{"line_number":4814,"context_line":"        compute_utils.notify_about_volume_attach_detach("},{"line_number":4815,"context_line":"            context, instance, self.host,"},{"line_number":4816,"context_line":"            action\u003dfields.NotificationAction.VOLUME_ATTACH,"},{"line_number":4817,"context_line":"            phase\u003dfields.NotificationPhase.START,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_deb666dd","line":4814,"in_reply_to":"5ff73747_6b0d60e7","updated":"2017-05-03 07:52:51.000000000","message":"Most of the instance.\u003caction\u003e.start is emitted from the compute/manager.py exclusively. \n\nThere are .error notifications emitted from the conductor/manager.py as well as some case of instance.delete as well.\n\nSome cases of instance.delete are sent from the compute/api.py as well as instance.evacuate, host related actions, aggregate and keypair actions.\n\nThe update on certain objects(instance, flavor, aggregate, instance_group, service) could emit notifications from different places. If the nova-api does some update on the object then nova-api service emits the notification, but if the nova-compute service update the object then I guess that the real update function runs in the nova-conductor service. \n\nWe can change this if consumers need a more consistent notification sources, or wants to know early about a request on the nova-api. But I would not jump in to this reshuffling work if we don\u0027t know what the consumer needs.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/compute/utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f94a5f8400c9ca28467df49f1e7cb90d3423457d","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    \"\"\"Send versioned notification about the action made on the instance"},{"line_number":395,"context_line":"    :param instance: the instance which the action performed on"},{"line_number":396,"context_line":"    :param host: the host emitting the notification"},{"line_number":397,"context_line":"    :param action: the name of the action"},{"line_number":398,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":399,"context_line":"    :param volume_id: id of the volume will be attached"},{"line_number":400,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":32,"id":"ffe62b97_2eeca2f1","line":397,"updated":"2017-03-27 17:29:21.000000000","message":"missing phase in the docstring, but just a femto-nit.","commit_id":"1f10f6395f7ed2d9f9e5da2460bf3c5f49d00b7a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"def notify_about_volume_attach_detach(context, instance, host, action, phase,"},{"line_number":370,"context_line":"                                      binary\u003d\u0027nova-compute\u0027, volume_id\u003dNone):"},{"line_number":371,"context_line":"    \"\"\"Send versioned notification about the action made on the instance"},{"line_number":372,"context_line":"    :param instance: the instance which the action performed on"},{"line_number":373,"context_line":"    :param host: the host emitting the notification"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_4b3e24db","line":370,"range":{"start_line":370,"start_character":38,"end_line":370,"end_character":59},"updated":"2017-05-02 19:24:51.000000000","message":"It doesn\u0027t seem like this needs to be a kwarg as nova-compute is the only place that sends these notifications, it could just be hard-coded inline.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":369,"context_line":"def notify_about_volume_attach_detach(context, instance, host, action, phase,"},{"line_number":370,"context_line":"                                      binary\u003d\u0027nova-compute\u0027, volume_id\u003dNone):"},{"line_number":371,"context_line":"    \"\"\"Send versioned notification about the action made on the instance"},{"line_number":372,"context_line":"    :param instance: the instance which the action performed on"},{"line_number":373,"context_line":"    :param host: the host emitting the notification"},{"line_number":374,"context_line":"    :param action: the name of the action"},{"line_number":375,"context_line":"    :param phase: the phase of the action"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_0b725ce4","line":372,"updated":"2017-05-02 19:24:51.000000000","message":"nit: there is normally a blank line between the description and the params.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    :param action: the name of the action"},{"line_number":375,"context_line":"    :param phase: the phase of the action"},{"line_number":376,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":377,"context_line":"    :param volume_id: id of the volume will be attached"},{"line_number":378,"context_line":"    \"\"\""},{"line_number":379,"context_line":"    payload \u003d instance_notification.InstanceActionVolumePayload("},{"line_number":380,"context_line":"            instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_8b1d4c75","line":377,"range":{"start_line":377,"start_character":39,"end_line":377,"end_character":55},"updated":"2017-05-02 19:24:51.000000000","message":"nit: being attached","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":376,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":377,"context_line":"    :param volume_id: id of the volume will be attached"},{"line_number":378,"context_line":"    \"\"\""},{"line_number":379,"context_line":"    payload \u003d instance_notification.InstanceActionVolumePayload("},{"line_number":380,"context_line":"            instance\u003dinstance,"},{"line_number":381,"context_line":"            fault\u003dNone,"},{"line_number":382,"context_line":"            volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_4b118353","line":379,"range":{"start_line":379,"start_character":36,"end_line":379,"end_character":63},"updated":"2017-05-02 19:24:51.000000000","message":"This name and the notification class name are a bit generic. Note that for volume swap it\u0027s more specific:\n\nInstanceActionVolumeSwapPayload\n\nInstanceActionVolumeSwapNotification\n\nSo I\u0027d think this could be something like InstanceActionVolumeAttachPayload but then maybe that would be confusing if it\u0027s also used for a detach notification (I wouldn\u0027t think so really but it\u0027s hard to know).","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53be82535e37edd30bdf9901937bf96de67ce56c","unresolved":false,"context_lines":[{"line_number":376,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":377,"context_line":"    :param volume_id: id of the volume will be attached"},{"line_number":378,"context_line":"    \"\"\""},{"line_number":379,"context_line":"    payload \u003d instance_notification.InstanceActionVolumePayload("},{"line_number":380,"context_line":"            instance\u003dinstance,"},{"line_number":381,"context_line":"            fault\u003dNone,"},{"line_number":382,"context_line":"            volume_id\u003dvolume_id)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_5e025640","line":379,"range":{"start_line":379,"start_character":36,"end_line":379,"end_character":63},"in_reply_to":"5ff73747_4b118353","updated":"2017-05-03 07:52:51.000000000","message":"We can define InstanceActionVolumeAttachPayload and InstanceActionVolumeDetachPayload as well to avoid problems in the future if somebody want different content in the different payloads. This leads back to the payload inheritance discussion summarized here https://review.openstack.org/#/c/453667","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b4437d90b9800dd04c844e1b371f6dbd7e7d6a03","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":116,"context_line":"class InstanceActionVolumePayload(InstanceActionPayload):"},{"line_number":117,"context_line":"    # Version 1.0: Initial version"},{"line_number":118,"context_line":"    # Version 1.1: locked and display_description added to InstancePayload"},{"line_number":119,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":120,"context_line":"    fields \u003d {"},{"line_number":121,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":122,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_766d9a03","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":19},"updated":"2017-01-11 10:14:21.000000000","message":"I think we don\u0027t have to create the InstanceActionVolumePayload already with version 1.1 as this is the first the the end user will receive this payload with the current content so this can be 1.0","commit_id":"f59eba99bd1e6759b92528d72f17ae13cd07d69f"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"0111e0a2dc0ee7d82b69ab7ab2f1f249a69a0292","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":116,"context_line":"class InstanceActionVolumePayload(InstanceActionPayload):"},{"line_number":117,"context_line":"    # Version 1.0: Initial version"},{"line_number":118,"context_line":"    # Version 1.1: locked and display_description added to InstancePayload"},{"line_number":119,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":120,"context_line":"    fields \u003d {"},{"line_number":121,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":122,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_5f7f98aa","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":19},"in_reply_to":"7a3c09a3_aa36c34f","updated":"2017-01-17 14:30:15.000000000","message":"Yes, you\u0027re right. Thanks for the clean explanation.","commit_id":"f59eba99bd1e6759b92528d72f17ae13cd07d69f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"549e901421c9a95815f6e15818833a7cc9f068b9","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":116,"context_line":"class InstanceActionVolumePayload(InstanceActionPayload):"},{"line_number":117,"context_line":"    # Version 1.0: Initial version"},{"line_number":118,"context_line":"    # Version 1.1: locked and display_description added to InstancePayload"},{"line_number":119,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":120,"context_line":"    fields \u003d {"},{"line_number":121,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":122,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_aa36c34f","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":19},"in_reply_to":"ba5201f7_36721512","updated":"2017-01-16 09:42:52.000000000","message":"But this definition tells that there was a 1.0 InstanceActionVolumePayload at some point of time but there wasn\u0027t. Imagine that we reach the point when InstancePayload has a version of  1.13 then somebody defines a new Payload inheriting from InstancePayload. Will nova then list 12 non existent version for the payload?\n\nThe notification consumer does not see the inheritance relationship she just see the payload class and a version for it. So I think having a version 1.0 InstanceActionVolumePayload does not cause any trouble to the consumer as she does not know at all about the InstancePayload 1.1","commit_id":"f59eba99bd1e6759b92528d72f17ae13cd07d69f"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"39c77c6f10d11514f664827f6706410a76cc2cec","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":116,"context_line":"class InstanceActionVolumePayload(InstanceActionPayload):"},{"line_number":117,"context_line":"    # Version 1.0: Initial version"},{"line_number":118,"context_line":"    # Version 1.1: locked and display_description added to InstancePayload"},{"line_number":119,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":120,"context_line":"    fields \u003d {"},{"line_number":121,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":122,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_36721512","line":119,"range":{"start_line":116,"start_character":0,"end_line":119,"end_character":19},"in_reply_to":"ba5201f7_766d9a03","updated":"2017-01-11 18:02:08.000000000","message":"I think that would make this class inconsistent with the other ones.","commit_id":"f59eba99bd1e6759b92528d72f17ae13cd07d69f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":137,"context_line":"    fields \u003d {"},{"line_number":138,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, instance, fault, volume_id):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_4b262319","line":138,"updated":"2017-05-02 19:24:51.000000000","message":"At some point when we\u0027re using the new cinder v3 APIs we\u0027ll use the bdm.attachment_id too, I\u0027m not sure if we\u0027d need those in the payload or not, but for now we don\u0027t so this is fine and consistent with the existing legacy notification.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"53be82535e37edd30bdf9901937bf96de67ce56c","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":137,"context_line":"    fields \u003d {"},{"line_number":138,"context_line":"        \u0027volume_id\u0027: fields.UUIDField()"},{"line_number":139,"context_line":"    }"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, instance, fault, volume_id):"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_fef8024a","line":138,"in_reply_to":"5ff73747_4b262319","updated":"2017-05-03 07:52:51.000000000","message":"If a consumer needs it we can add it.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c10a7e490dcfc0e287df349a2824019ab1682fc","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    in fake_notifier.VERSIONED_NOTIFICATIONS"},{"line_number":190,"context_line":"                    if notification[\u0027event_type\u0027] \u003d\u003d event_type]"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    # duplication of https://review.openstack.org/#/c/396225"},{"line_number":193,"context_line":"    def _wait_for_notification(self, event_type):"},{"line_number":194,"context_line":"        for i in range(20):"},{"line_number":195,"context_line":"            if self._get_notifications(event_type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_30518c63","line":192,"updated":"2016-11-30 15:19:16.000000000","message":"If you need this you can either put your patch top of the referred one, or we could split this utility function out from the referred patch and create a simple patch that both your and the referred commit can depend on","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"c442cec8face11c3d045d7aeef7e2ef6433d2ce5","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    in fake_notifier.VERSIONED_NOTIFICATIONS"},{"line_number":190,"context_line":"                    if notification[\u0027event_type\u0027] \u003d\u003d event_type]"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    # duplication of https://review.openstack.org/#/c/396225"},{"line_number":193,"context_line":"    def _wait_for_notification(self, event_type):"},{"line_number":194,"context_line":"        for i in range(20):"},{"line_number":195,"context_line":"            if self._get_notifications(event_type):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_c9ed4127","line":192,"in_reply_to":"5a74a57a_30518c63","updated":"2016-12-01 09:51:20.000000000","message":"I\u0027d prefer the second choice, as the patchsets have completely different purpose.","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c10a7e490dcfc0e287df349a2824019ab1682fc","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":602,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[4])"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def test_volume_attach_detach_server(self):"},{"line_number":605,"context_line":"        server \u003d self._boot_a_server("},{"line_number":606,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":607,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_1089f0ca","line":604,"updated":"2016-11-30 15:19:16.000000000","message":"you can include this to the test_instance_action to spare the instance boot.","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c10a7e490dcfc0e287df349a2824019ab1682fc","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_OLD_VOL)"},{"line_number":610,"context_line":"        self._wait_for_notification(\u0027instance.volume_attach\u0027)"},{"line_number":611,"context_line":"        print(fake_notifier.VERSIONED_NOTIFICATIONS)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        # 0. instance-create-start"},{"line_number":614,"context_line":"        # 1. instance-create-end"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_f6538c6a","line":611,"updated":"2016-11-30 15:19:16.000000000","message":"remove the print from the final version","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"43d73ec9bf9fbda385db6c3b5669908960f577f6","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def _test_volume_attach_detach_server(self, server):"},{"line_number":772,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_OLD_VOL)"},{"line_number":773,"context_line":"        self._wait_for_notification(\u0027instance.volume_attach.end\u0027)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        # 0. volume_attach-start"},{"line_number":776,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":43,"id":"bff0334d_efd62dc4","line":773,"updated":"2017-04-05 14:49:05.000000000","message":"The _attach_volume_to_server() call already waits for the instance.volume_attach.end","commit_id":"dd62c907df16cacfddc347f253be1deee3b11ccf"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"b38fdfe2c1c76683a58b6377f6db28590303adcc","unresolved":false,"context_lines":[{"line_number":770,"context_line":""},{"line_number":771,"context_line":"    def _test_volume_attach_detach_server(self, server):"},{"line_number":772,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_OLD_VOL)"},{"line_number":773,"context_line":"        self._wait_for_notification(\u0027instance.volume_attach.end\u0027)"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"        # 0. volume_attach-start"},{"line_number":776,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":43,"id":"bff0334d_7b089827","line":773,"in_reply_to":"bff0334d_efd62dc4","updated":"2017-04-05 16:41:30.000000000","message":"Done","commit_id":"dd62c907df16cacfddc347f253be1deee3b11ccf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"43d73ec9bf9fbda385db6c3b5669908960f577f6","unresolved":false,"context_lines":[{"line_number":782,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        # 1. volume_attach-end"},{"line_number":785,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":786,"context_line":"        self._verify_notification("},{"line_number":787,"context_line":"            \u0027instance-volume_attach-end\u0027,"},{"line_number":788,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":43,"id":"bff0334d_afef05af","line":785,"updated":"2017-04-05 14:49:05.000000000","message":"This assert the same state as line 776","commit_id":"dd62c907df16cacfddc347f253be1deee3b11ccf"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"b38fdfe2c1c76683a58b6377f6db28590303adcc","unresolved":false,"context_lines":[{"line_number":782,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        # 1. volume_attach-end"},{"line_number":785,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":786,"context_line":"        self._verify_notification("},{"line_number":787,"context_line":"            \u0027instance-volume_attach-end\u0027,"},{"line_number":788,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":43,"id":"bff0334d_5b0dd435","line":785,"in_reply_to":"bff0334d_afef05af","updated":"2017-04-05 16:41:30.000000000","message":"Done","commit_id":"dd62c907df16cacfddc347f253be1deee3b11ccf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e33970daef0c94f48ae2c080c22af0f70fd9bf4","unresolved":false,"context_lines":[{"line_number":728,"context_line":"                                 self.cinder.SWAP_ERR_NEW_VOL)"},{"line_number":729,"context_line":"        self._wait_until_swap_volume_error()"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        # Six versioned notifications are generated. We only rely on the"},{"line_number":732,"context_line":"        # first five because _wait_until_swap_volume_error will return True"},{"line_number":733,"context_line":"        # after volume_api.unreserve is called on the cinder fixture, and that"},{"line_number":734,"context_line":"        # happens before the instance fault is handled in the compute manager"}],"source_content_type":"text/x-python","patch_set":44,"id":"bff0334d_37d1dcce","line":731,"range":{"start_line":731,"start_character":10,"end_line":731,"end_character":13},"updated":"2017-04-06 13:05:14.000000000","message":"s/Six/Seven/","commit_id":"e6137598aefe5402922e1f4900f1ef9bb6338cad"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e33970daef0c94f48ae2c080c22af0f70fd9bf4","unresolved":false,"context_lines":[{"line_number":729,"context_line":"        self._wait_until_swap_volume_error()"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        # Six versioned notifications are generated. We only rely on the"},{"line_number":732,"context_line":"        # first five because _wait_until_swap_volume_error will return True"},{"line_number":733,"context_line":"        # after volume_api.unreserve is called on the cinder fixture, and that"},{"line_number":734,"context_line":"        # happens before the instance fault is handled in the compute manager"},{"line_number":735,"context_line":"        # which generates the last notification (compute.exception)."}],"source_content_type":"text/x-python","patch_set":44,"id":"bff0334d_f7da54e7","line":732,"range":{"start_line":732,"start_character":16,"end_line":732,"end_character":20},"updated":"2017-04-06 13:05:14.000000000","message":"s/five/six/","commit_id":"e6137598aefe5402922e1f4900f1ef9bb6338cad"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e33970daef0c94f48ae2c080c22af0f70fd9bf4","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # 4. instance-volume_swap-start"},{"line_number":741,"context_line":"        # 5. instance-volume_swap-error"},{"line_number":742,"context_line":"        # 6. compute.exception"},{"line_number":743,"context_line":"        self.assertTrue(len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d 5,"},{"line_number":744,"context_line":"                        \u0027Unexpected number of versioned notifications. \u0027"},{"line_number":745,"context_line":"                        \u0027Expected at least 5, got: %s\u0027 %"},{"line_number":746,"context_line":"                        len(fake_notifier.VERSIONED_NOTIFICATIONS))"}],"source_content_type":"text/x-python","patch_set":44,"id":"bff0334d_978f88cb","line":743,"range":{"start_line":743,"start_character":70,"end_line":743,"end_character":71},"updated":"2017-04-06 13:05:14.000000000","message":"It should be 6.","commit_id":"e6137598aefe5402922e1f4900f1ef9bb6338cad"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e33970daef0c94f48ae2c080c22af0f70fd9bf4","unresolved":false,"context_lines":[{"line_number":742,"context_line":"        # 6. compute.exception"},{"line_number":743,"context_line":"        self.assertTrue(len(fake_notifier.VERSIONED_NOTIFICATIONS) \u003e\u003d 5,"},{"line_number":744,"context_line":"                        \u0027Unexpected number of versioned notifications. \u0027"},{"line_number":745,"context_line":"                        \u0027Expected at least 5, got: %s\u0027 %"},{"line_number":746,"context_line":"                        len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":747,"context_line":"        self._verify_notification("},{"line_number":748,"context_line":"            \u0027instance-volume_swap-start\u0027,"}],"source_content_type":"text/x-python","patch_set":44,"id":"bff0334d_77be4466","line":745,"range":{"start_line":745,"start_character":43,"end_line":745,"end_character":44},"updated":"2017-04-06 13:05:14.000000000","message":"ditto","commit_id":"e6137598aefe5402922e1f4900f1ef9bb6338cad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":706,"context_line":"                                 self.cinder.SWAP_NEW_VOL)"},{"line_number":707,"context_line":"        self._wait_until_swap_volume(server, self.cinder.SWAP_NEW_VOL)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        self.assertEqual(6, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":710,"context_line":"        self._verify_notification("},{"line_number":711,"context_line":"            \u0027instance-volume_swap-start\u0027,"},{"line_number":712,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_6b70bfdd","line":709,"updated":"2017-05-02 19:24:51.000000000","message":"OK this is not because swap volume emits these new notifications, it\u0027s because _attach_volume_to_server does. A comment might be nice here.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b0eb7bc5dda553088f376f56d8ce6e6f731f2f8","unresolved":false,"context_lines":[{"line_number":771,"context_line":"    def _test_trigger_crash_dump(self, server):"},{"line_number":772,"context_line":"        pass"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    def _test_volume_attach_detach_server(self, server):"},{"line_number":775,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_OLD_VOL)"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"        # 0. volume_attach-start"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_0b2dbba7","line":774,"updated":"2017-05-02 19:24:51.000000000","message":"This could have just been built into test_volume_swap_server since it\u0027s redundant now, but I guess it\u0027s fine to have this test testing these notifications specifically without the additional swap volume complexity.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c10a7e490dcfc0e287df349a2824019ab1682fc","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        self.assertEqual(20, volume_usage[\u0027tot_write_bytes\u0027])"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":809,"context_line":"            mock.call(mock.ANY, instance, \u0027fake-mini\u0027,"},{"line_number":810,"context_line":"                      action\u003d\u0027volume_attach\u0027, volume_id\u003duuids.volume_id),"},{"line_number":811,"context_line":"            ])"},{"line_number":812,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a74a57a_36e504a8","line":809,"range":{"start_line":809,"start_character":22,"end_line":809,"end_character":30},"updated":"2016-11-30 15:19:16.000000000","message":"This can be a specific value, see my comments in the manager.py","commit_id":"e9760ba48ce5ec0d158d165f2f225af4d1cc7c6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"76ec3231726024a7402735793236b80b821eb755","unresolved":false,"context_lines":[{"line_number":836,"context_line":"        mock_notify.assert_has_calls(["},{"line_number":837,"context_line":"            mock.call(self.context, instance, \u0027fake-mini\u0027,"},{"line_number":838,"context_line":"                      action\u003d\u0027volume_attach\u0027, phase\u003d\u0027start\u0027,"},{"line_number":839,"context_line":"                      volume_id\u003duuids.volume_id),"},{"line_number":840,"context_line":"            ])"},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"        mock_get.assert_called_once_with(self.context, uuids.volume_id,"}],"source_content_type":"text/x-python","patch_set":49,"id":"5ff73747_0229c736","line":839,"updated":"2017-04-26 09:56:49.000000000","message":"I guess you can assert volume_attach.end here the way you did in the next patch https://review.openstack.org/#/c/408676/30/nova/tests/unit/compute/test_compute.py \n\nBut as there is already a next patch fixing it I\u0027m OK to merge this as we will merge the next patch too.","commit_id":"9ae66cc4b77672e000119c581f52a5563ac716ad"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":18603,"name":"Béla Vancsics","email":"vancsics@inf.u-szeged.hu","username":"vancsics"},"change_message_id":"d060b8262febacdeea050ca4092a1ea1ec76c9b5","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":360,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.2-b7b2481bcd0e1edcc1970ef7150df5aa\u0027,"},{"line_number":361,"context_line":"    \u0027InstanceActionVolumeNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":362,"context_line":"    \u0027InstanceActionVolumePayload\u0027: \u00271.0-ea371c8a977017901cecfbbe66b7d5dd\u0027,"},{"line_number":363,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":364,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":365,"context_line":"    \u0027InstanceActionVolumeSwapPayload\u0027: \u00271.2-d7925b763e0795f8e5c1aa0e95bd67bd\u0027,"}],"source_content_type":"text/x-python","patch_set":48,"id":"5ff73747_ff879b0e","line":362,"range":{"start_line":362,"start_character":36,"end_line":362,"end_character":72},"updated":"2017-04-26 06:18:45.000000000","message":"-\u003e 1.0-20c0dca4cfaf1a68d3e8c45e5aca3907","commit_id":"223d21fead1fe68a72d544b5762acdc2f971a28e"}]}
