)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1f78cc414037f6d3242d7289950bef937052911a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"* \u0027instance.volume_swap.end\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Subsequent patches will add \u0027instance.volume_swap.error\u0027"},{"line_number":15,"context_line":"and a release note."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic4d9d25bdc611221157e4663817e918b8d667ce9"},{"line_number":18,"context_line":"Implements: blueprint add-swap-volume-notifications"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":39,"id":"1a95cdbc_22a7ba0b","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":19},"updated":"2016-10-10 16:40:31.000000000","message":"Actually see my comment in:\n\nhttps://review.openstack.org/#/c/328055/22/releasenotes/notes/add-swap-volume-notifications-bb7e14230fccfd6e.yaml\n\nLet\u0027s add the release note with the start/end notifications in this patch, and then just update that release note in the error patch that\u0027s after this one.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"* \u0027instance.volume_swap.end\u0027"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Subsequent patches will add \u0027instance.volume_swap.error\u0027"},{"line_number":15,"context_line":"and a release note."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ic4d9d25bdc611221157e4663817e918b8d667ce9"},{"line_number":18,"context_line":"Implements: blueprint add-swap-volume-notifications"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":39,"id":"fa6399be_6f88a0e8","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":19},"in_reply_to":"1a95cdbc_22a7ba0b","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"}],"doc/notification_samples/instance-delete-start.json":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f2a4280872a7b9d2a24cf3ff4d9b7c5af89699d6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    },"},{"line_number":52,"context_line":"    \"priority\":\"INFO\","},{"line_number":53,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":54,"context_line":"}"}],"source_content_type":"application/json","patch_set":12,"id":"7aa08908_b8d8fdf0","line":54,"updated":"2016-06-06 08:45:48.000000000","message":"Have you created new samples for your new notifications, and the associated tests yet? We will need those.","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e8ca6c3480fadd660b160e0d130959bf99dde26","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    },"},{"line_number":52,"context_line":"    \"priority\":\"INFO\","},{"line_number":53,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":54,"context_line":"}"}],"source_content_type":"application/json","patch_set":12,"id":"7aa08908_cd7d0970","line":54,"in_reply_to":"7aa08908_b8d8fdf0","updated":"2016-06-07 07:49:50.000000000","message":"I will add samples and functional tests in another(subsequent) patch.","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"209c0fe140f57aaf6d8b2f7ebfba6d8484569e15","unresolved":false,"context_lines":[{"line_number":4821,"context_line":"        context \u003d context.elevated()"},{"line_number":4822,"context_line":""},{"line_number":4823,"context_line":"        compute_utils.notify_about_instance_action_volume_swap("},{"line_number":4824,"context_line":"            context, instance, self.host, \u0027volume_swap\u0027, \u0027start\u0027,"},{"line_number":4825,"context_line":"            old_volume_id, new_volume_id)"},{"line_number":4826,"context_line":""},{"line_number":4827,"context_line":"        bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":18,"id":"5a9d85d2_e7e5cba8","line":4824,"range":{"start_line":4824,"start_character":42,"end_line":4824,"end_character":65},"updated":"2016-06-20 11:04:33.000000000","message":"you can use the contants defined in the NotificationAction and in the NotificationPhase instead.","commit_id":"b80bb56d55e8944ced7475957ff0cdf6b354d8a3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d247c20a7e31fa228038a148a421d57833c8c13b","unresolved":false,"context_lines":[{"line_number":4821,"context_line":"        context \u003d context.elevated()"},{"line_number":4822,"context_line":""},{"line_number":4823,"context_line":"        compute_utils.notify_about_instance_action_volume_swap("},{"line_number":4824,"context_line":"            context, instance, self.host, \u0027volume_swap\u0027, \u0027start\u0027,"},{"line_number":4825,"context_line":"            old_volume_id, new_volume_id)"},{"line_number":4826,"context_line":""},{"line_number":4827,"context_line":"        bdm \u003d objects.BlockDeviceMapping.get_by_volume_and_instance("}],"source_content_type":"text/x-python","patch_set":18,"id":"5a9d85d2_f48f0e21","line":4824,"range":{"start_line":4824,"start_character":42,"end_line":4824,"end_character":65},"in_reply_to":"5a9d85d2_e7e5cba8","updated":"2016-06-21 05:09:07.000000000","message":"Done","commit_id":"b80bb56d55e8944ced7475957ff0cdf6b354d8a3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"209c0fe140f57aaf6d8b2f7ebfba6d8484569e15","unresolved":false,"context_lines":[{"line_number":4866,"context_line":"        bdm.save()"},{"line_number":4867,"context_line":""},{"line_number":4868,"context_line":"        compute_utils.notify_about_instance_action_volume_swap("},{"line_number":4869,"context_line":"            context, instance, self.host, \u0027volume_swap\u0027, \u0027end\u0027,"},{"line_number":4870,"context_line":"            old_volume_id, new_volume_id)"},{"line_number":4871,"context_line":""},{"line_number":4872,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a9d85d2_27eeb38b","line":4869,"range":{"start_line":4869,"start_character":42,"end_line":4869,"end_character":62},"updated":"2016-06-20 11:04:33.000000000","message":"same as above","commit_id":"b80bb56d55e8944ced7475957ff0cdf6b354d8a3"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d247c20a7e31fa228038a148a421d57833c8c13b","unresolved":false,"context_lines":[{"line_number":4866,"context_line":"        bdm.save()"},{"line_number":4867,"context_line":""},{"line_number":4868,"context_line":"        compute_utils.notify_about_instance_action_volume_swap("},{"line_number":4869,"context_line":"            context, instance, self.host, \u0027volume_swap\u0027, \u0027end\u0027,"},{"line_number":4870,"context_line":"            old_volume_id, new_volume_id)"},{"line_number":4871,"context_line":""},{"line_number":4872,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a9d85d2_d492d24a","line":4869,"range":{"start_line":4869,"start_character":42,"end_line":4869,"end_character":62},"in_reply_to":"5a9d85d2_27eeb38b","updated":"2016-06-21 05:09:07.000000000","message":"Done","commit_id":"b80bb56d55e8944ced7475957ff0cdf6b354d8a3"}],"nova/compute/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9aeda4467bd14c1f91cd5a901d1c92ed51035826","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    :param host: the host emitting the notification"},{"line_number":360,"context_line":"    :param action: the name of the action"},{"line_number":361,"context_line":"    :param phase: the phase of the action"},{"line_number":362,"context_line":"    :param old_volume: the volume that is copied from and detached"},{"line_number":363,"context_line":"    :param new_volume: the volume that is copied to and attached"},{"line_number":364,"context_line":"    \"\"\""},{"line_number":365,"context_line":"    ips \u003d _get_instance_ips(instance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_0211ecaf","line":362,"range":{"start_line":362,"start_character":34,"end_line":362,"end_character":53},"updated":"2016-06-09 14:59:24.000000000","message":"does it mean that we are copying the some data from the old_volume?","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ca13a5adcd08193c4991762a5bf6e142eb49ef81","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    :param host: the host emitting the notification"},{"line_number":360,"context_line":"    :param action: the name of the action"},{"line_number":361,"context_line":"    :param phase: the phase of the action"},{"line_number":362,"context_line":"    :param old_volume: the volume that is copied from and detached"},{"line_number":363,"context_line":"    :param new_volume: the volume that is copied to and attached"},{"line_number":364,"context_line":"    \"\"\""},{"line_number":365,"context_line":"    ips \u003d _get_instance_ips(instance)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_f2573924","line":362,"range":{"start_line":362,"start_character":34,"end_line":362,"end_character":53},"in_reply_to":"7aa08908_0211ecaf","updated":"2016-06-09 22:03:44.000000000","message":"Yes.","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"edb001f440296187304628e33b9f51aa2de8ee03","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    notification.emit(context)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"def notify_about_instance_action_volume_swap(context, instance, host,"},{"line_number":372,"context_line":"                                             action, phase, old_volume,"},{"line_number":373,"context_line":"                                             new_volume):"},{"line_number":374,"context_line":"    \"\"\"Send versioned notification about the volume swap action"}],"source_content_type":"text/x-python","patch_set":24,"id":"3aaa91ec_7ddcaa18","line":371,"range":{"start_line":371,"start_character":4,"end_line":371,"end_character":44},"updated":"2016-06-28 10:43:49.000000000","message":"Nit: notify_about_volume_swap would be enough here, I think.","commit_id":"9bbf6b614c9959bdf19a9d66e24b7937e585f50f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"93e3d9af8d8bf1e218850be0b4d561984263e0c4","unresolved":false,"context_lines":[{"line_number":368,"context_line":"    notification.emit(context)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"def notify_about_instance_action_volume_swap(context, instance, host,"},{"line_number":372,"context_line":"                                             action, phase, old_volume,"},{"line_number":373,"context_line":"                                             new_volume):"},{"line_number":374,"context_line":"    \"\"\"Send versioned notification about the volume swap action"}],"source_content_type":"text/x-python","patch_set":24,"id":"3aaa91ec_4ef2d670","line":371,"range":{"start_line":371,"start_character":4,"end_line":371,"end_character":44},"in_reply_to":"3aaa91ec_7ddcaa18","updated":"2016-06-28 11:37:17.000000000","message":"Done","commit_id":"9bbf6b614c9959bdf19a9d66e24b7937e585f50f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1912ad74f3ef93eada568891b75660de23ed8e77","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                             old_volume_id, new_volume_id):"},{"line_number":375,"context_line":"    \"\"\"Send versioned notification about the volume swap action"},{"line_number":376,"context_line":"       on the instance"},{"line_number":377,"context_line":"    :param context: the request context"},{"line_number":378,"context_line":"    :param instance: the instance which the action performed on"},{"line_number":379,"context_line":"    :param host: the host emitting the notification"},{"line_number":380,"context_line":"    :param action: the name of the action"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_5a44b048","line":377,"updated":"2016-10-10 15:00:09.000000000","message":"nit: I think you\u0027re generally supposed to have a blank line between the method description and the parameters.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                             old_volume_id, new_volume_id):"},{"line_number":375,"context_line":"    \"\"\"Send versioned notification about the volume swap action"},{"line_number":376,"context_line":"       on the instance"},{"line_number":377,"context_line":"    :param context: the request context"},{"line_number":378,"context_line":"    :param instance: the instance which the action performed on"},{"line_number":379,"context_line":"    :param host: the host emitting the notification"},{"line_number":380,"context_line":"    :param action: the name of the action"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_dda089a8","line":377,"in_reply_to":"1a95cdbc_5a44b048","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"170491e06fe0303c605295532796035f916e1f85","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    #              for swap volume"},{"line_number":115,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":116,"context_line":"    fields \u003d {"},{"line_number":117,"context_line":"        \u0027old_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":118,"context_line":"        \u0027new_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":119,"context_line":"        \u0027fault\u0027: fields.ObjectField(\u0027ExceptionPayload\u0027, nullable\u003dTrue),"},{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_78b055f5","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":56},"updated":"2016-06-06 08:41:56.000000000","message":"Please extend the InstanceActionPayload by subclassing it as it is used for multiple even_types where the old and new volume field does not make to much sense","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e8ca6c3480fadd660b160e0d130959bf99dde26","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    #              for swap volume"},{"line_number":115,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":116,"context_line":"    fields \u003d {"},{"line_number":117,"context_line":"        \u0027old_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":118,"context_line":"        \u0027new_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":119,"context_line":"        \u0027fault\u0027: fields.ObjectField(\u0027ExceptionPayload\u0027, nullable\u003dTrue),"},{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_ad5b5d2d","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":56},"in_reply_to":"7aa08908_788855e8","updated":"2016-06-07 07:49:50.000000000","message":"Done","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f2a4280872a7b9d2a24cf3ff4d9b7c5af89699d6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    #              for swap volume"},{"line_number":115,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":116,"context_line":"    fields \u003d {"},{"line_number":117,"context_line":"        \u0027old_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":118,"context_line":"        \u0027new_volume\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":119,"context_line":"        \u0027fault\u0027: fields.ObjectField(\u0027ExceptionPayload\u0027, nullable\u003dTrue),"},{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_788855e8","line":118,"range":{"start_line":117,"start_character":0,"end_line":118,"end_character":56},"in_reply_to":"7aa08908_78b055f5","updated":"2016-06-06 08:45:48.000000000","message":"+1","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9aeda4467bd14c1f91cd5a901d1c92ed51035826","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \u0027new_volume\u0027: fields.StringField(),"},{"line_number":130,"context_line":"    }"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def __init__(self, instance, fault, ip_addresses,"},{"line_number":133,"context_line":"                 old_volume, new_volume):"},{"line_number":134,"context_line":"        super(InstanceActionVolumeSwapPayload, self).__init__("},{"line_number":135,"context_line":"                instance\u003dinstance,"},{"line_number":136,"context_line":"                fault\u003dfault,"},{"line_number":137,"context_line":"                ip_addresses\u003dip_addresses)"},{"line_number":138,"context_line":"        self.old_volume \u003d old_volume"},{"line_number":139,"context_line":"        self.new_volume \u003d new_volume"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_a519027c","line":139,"range":{"start_line":132,"start_character":0,"end_line":139,"end_character":36},"updated":"2016-06-09 14:59:24.000000000","message":"I think the base constructor will take care of storing the old_volume and new_volume fields so you don\u0027t need this constructor at all","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"04c386e33be76c2eacf6b5aa7fd9cb704973bddf","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \u0027new_volume\u0027: fields.StringField(),"},{"line_number":130,"context_line":"    }"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def __init__(self, instance, fault, ip_addresses,"},{"line_number":133,"context_line":"                 old_volume, new_volume):"},{"line_number":134,"context_line":"        super(InstanceActionVolumeSwapPayload, self).__init__("},{"line_number":135,"context_line":"                instance\u003dinstance,"},{"line_number":136,"context_line":"                fault\u003dfault,"},{"line_number":137,"context_line":"                ip_addresses\u003dip_addresses)"},{"line_number":138,"context_line":"        self.old_volume \u003d old_volume"},{"line_number":139,"context_line":"        self.new_volume \u003d new_volume"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_fe76e204","line":139,"range":{"start_line":132,"start_character":0,"end_line":139,"end_character":36},"in_reply_to":"7aa08908_a519027c","updated":"2016-06-09 23:47:54.000000000","message":"Done","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9aeda4467bd14c1f91cd5a901d1c92ed51035826","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"@base.notification_sample(\u0027instance-volume_swap-start.json\u0027)"},{"line_number":169,"context_line":"@base.notification_sample(\u0027instance-volume_swap-end.json\u0027)"},{"line_number":170,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":171,"context_line":"class InstanceActionVolumeSwapNotification(base.NotificationBase):"},{"line_number":172,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_c5336ef5","line":169,"range":{"start_line":168,"start_character":0,"end_line":169,"end_character":58},"updated":"2016-06-09 14:59:24.000000000","message":"This shall be added when you add the referenced files to the commit as well, until that this adds  dead links to the documentation","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"04c386e33be76c2eacf6b5aa7fd9cb704973bddf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"@base.notification_sample(\u0027instance-volume_swap-start.json\u0027)"},{"line_number":169,"context_line":"@base.notification_sample(\u0027instance-volume_swap-end.json\u0027)"},{"line_number":170,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":171,"context_line":"class InstanceActionVolumeSwapNotification(base.NotificationBase):"},{"line_number":172,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_3e5fca76","line":169,"range":{"start_line":168,"start_character":0,"end_line":169,"end_character":58},"in_reply_to":"7aa08908_c5336ef5","updated":"2016-06-09 23:47:54.000000000","message":"Done","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0025fd56761ce7f89a6f9bbce6fb6cac20f3cd1d","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@base.notification_sample(\u0027instance-volume_swap-start.json\u0027)"},{"line_number":212,"context_line":"@base.notification_sample(\u0027instance-volume_swap-end.json\u0027)"},{"line_number":213,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":214,"context_line":"class InstanceActionVolumeSwapNotification(base.NotificationBase):"},{"line_number":215,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":24,"id":"3aaa91ec_18a77450","line":212,"updated":"2016-06-28 11:05:00.000000000","message":"Its odd having these two decorators here, but not including the files.","commit_id":"9bbf6b614c9959bdf19a9d66e24b7937e585f50f"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"93e3d9af8d8bf1e218850be0b4d561984263e0c4","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"@base.notification_sample(\u0027instance-volume_swap-start.json\u0027)"},{"line_number":212,"context_line":"@base.notification_sample(\u0027instance-volume_swap-end.json\u0027)"},{"line_number":213,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":214,"context_line":"class InstanceActionVolumeSwapNotification(base.NotificationBase):"},{"line_number":215,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":24,"id":"3aaa91ec_4e677625","line":212,"in_reply_to":"3aaa91ec_18a77450","updated":"2016-06-28 11:37:17.000000000","message":"If there is not a decorator, \u0027gate-nova-docs\u0027 job fails.\n\nFor example:\n2016-06-09 23:41:51.886 | AttributeError: type object \u0027InstanceActionVolumeSwapNotification\u0027 has no attribute \u0027samples\u0027\n2016-06-09 23:41:51.917 | ERROR: InvocationError: \u0027/home/jenkins/workspace/gate-nova-docs/.tox/venv/bin/python setup.py build_sphinx\u0027","commit_id":"9bbf6b614c9959bdf19a9d66e24b7937e585f50f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dab85bd5832c9994838f6b9edce330b65a6385d0","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":"        \u0027old_volume\u0027: fields.StringField(),"},{"line_number":115,"context_line":"        \u0027new_volume\u0027: fields.StringField(),"},{"line_number":116,"context_line":"    }"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3aaa91ec_21a286ae","line":114,"range":{"start_line":114,"start_character":22,"end_line":114,"end_character":42},"updated":"2016-06-30 09:51:29.000000000","message":"I\u0027m confused, why are you not using the UUID field ?\nI generally hate to use unformalized field types, even more when the field name is a bit unclear about what is the value.","commit_id":"dbd6aaf7745b86d2ac99a7d2bd89c3528d678609"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"677f87374a69785d6c81d96d84e7221d48c0f6b7","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":"        \u0027old_volume\u0027: fields.StringField(),"},{"line_number":115,"context_line":"        \u0027new_volume\u0027: fields.StringField(),"},{"line_number":116,"context_line":"    }"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3aaa91ec_5c7fb416","line":114,"range":{"start_line":114,"start_character":22,"end_line":114,"end_character":42},"in_reply_to":"3aaa91ec_21a286ae","updated":"2016-06-30 12:48:49.000000000","message":"Done","commit_id":"dbd6aaf7745b86d2ac99a7d2bd89c3528d678609"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"17a9149e166e378bcf95f818c21dc97e934bac0b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_4485bbcc","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"updated":"2016-10-10 14:34:52.000000000","message":"nit: move this to a new line as all the above parameters has its own line.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"96ddd269eb3f8ae4761ccbde56fa20577dacc697","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_397ff115","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"in_reply_to":"1a95cdbc_3a11a404","updated":"2016-10-10 15:41:44.000000000","message":"Actually I guess this should be OK, the kwargs aren\u0027t used until the very base VersionedObject base class in o.vo which uses the kwargs to set the object\u0027s attributes. That should trigger a unit test to fail if someone passes up new field values to set but doesn\u0027t bump the version, so I think we\u0027re covered.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"203e352c36c77b0854ac417047c9db4fb2e417e0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_7976d906","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"in_reply_to":"1a95cdbc_3a11a404","updated":"2016-10-10 15:47:25.000000000","message":"If we want to initialize the VersionObject fields via the __init__ then we have to pass them up to the VersionObject.__init__(). The old_volume_id and the new_volume_id is passed from InstanceActionVolumeSwapPayload through InstanceActionPayload (and other base classes) to VersionedObject.__init__()\nthis can only be done with **kwargs as the base classes cannot know about the names of parameters of the derived classes\u0027 __init__(). This is also why VersionedObject.__init__() expect a **kwargs.\n\nAs this can only be used to initialize what is already declared in the fields of the VersionedObject this way we mistakenly avoid version bumps as the content of the fields dict is part of the version hash.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_9d76113d","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"in_reply_to":"1a95cdbc_4485bbcc","updated":"2016-10-11 10:20:26.000000000","message":"\u003e move this to a new line as all the above parameters has its own line.\n\nDone.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1912ad74f3ef93eada568891b75660de23ed8e77","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_3a11a404","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"in_reply_to":"1a95cdbc_4485bbcc","updated":"2016-10-10 15:00:09.000000000","message":"Why do we even need the kwargs here? This seems like a way that subclasses could leak new things without having a version bump.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                instance\u003dinstance,"},{"line_number":103,"context_line":"                fault\u003dfault,"},{"line_number":104,"context_line":"                ip_addresses\u003dip_addresses,"},{"line_number":105,"context_line":"                flavor\u003dflavor, **kwargs)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"@nova_base.NovaObjectRegistry.register_notification"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_397a91bd","line":105,"range":{"start_line":105,"start_character":31,"end_line":105,"end_character":39},"in_reply_to":"1a95cdbc_7976d906","updated":"2016-10-10 16:14:18.000000000","message":"Yup, I just tested it out by adding a new \u0027test\u0027 field to the InstanceActionVolumeSwapPayload and the test failed on the version hash:\n\nnova.tests.unit.notifications.objects.test_notification.TestNotificationObjectVersions.test_versions\n----------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"nova/tests/unit/notifications/objects/test_notification.py\", line 293, in test_versions\n        \u0027Some notification objects have changed; please make \u0027\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 411, in assertEqual\n        self.assertThat(observed, matcher, message)\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 498, in assertThat\n        raise mismatch_error\n    testtools.matchers._impl.MismatchError: !\u003d:\n    reference \u003d {\u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-1043222e12be67403cab471ea1989b76\u0027}\n    actual    \u003d {\u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-b2c1b7646e4b5d34bd7d8e82731ba4e8\u0027}\n    : Some notification objects have changed; please make sure the versions have been bumped, and then update their hashes here.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"170491e06fe0303c605295532796035f916e1f85","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    UPDATE \u003d \u0027update\u0027"},{"line_number":588,"context_line":"    EXCEPTION \u003d \u0027exception\u0027"},{"line_number":589,"context_line":"    DELETE \u003d \u0027delete\u0027"},{"line_number":590,"context_line":"    VOLUME_SWAP \u003d \u0027volume.swap\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, VOLUME_SWAP)"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_d8ca294f","line":590,"updated":"2016-06-06 08:41:56.000000000","message":"Looking through the existing even_types I would name this to \u0027volume_swap\u0027 so that the dot \u0027.\u0027 can be used clearly to separate object, action, and phase e.g. object.action.phase .","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"1e8ca6c3480fadd660b160e0d130959bf99dde26","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    UPDATE \u003d \u0027update\u0027"},{"line_number":588,"context_line":"    EXCEPTION \u003d \u0027exception\u0027"},{"line_number":589,"context_line":"    DELETE \u003d \u0027delete\u0027"},{"line_number":590,"context_line":"    VOLUME_SWAP \u003d \u0027volume.swap\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, VOLUME_SWAP)"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_2d480d5b","line":590,"in_reply_to":"7aa08908_38652d45","updated":"2016-06-07 07:49:50.000000000","message":"Done","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f2a4280872a7b9d2a24cf3ff4d9b7c5af89699d6","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    UPDATE \u003d \u0027update\u0027"},{"line_number":588,"context_line":"    EXCEPTION \u003d \u0027exception\u0027"},{"line_number":589,"context_line":"    DELETE \u003d \u0027delete\u0027"},{"line_number":590,"context_line":"    VOLUME_SWAP \u003d \u0027volume.swap\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    ALL \u003d (UPDATE, EXCEPTION, DELETE, VOLUME_SWAP)"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_38652d45","line":590,"in_reply_to":"7aa08908_d8ca294f","updated":"2016-06-06 08:45:48.000000000","message":"+1","commit_id":"684b455cc2806702243f732c8f3755c81704a4bf"}],"nova/tests/fixtures.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":795,"context_line":"class CinderFixture(fixtures.Fixture):"},{"line_number":796,"context_line":"    \"\"\"A fixture to volume operations\"\"\""},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    # the default project_id in OsaAPIFixtures"},{"line_number":799,"context_line":"    tenant_id \u003d \u00276f70656e737461636b20342065766572\u0027"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    SWAP_VOL \u003d \u0027a07f71dc-8151-4e7d-a0cc-cd24a3f11113\u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_5923ddbc","line":798,"range":{"start_line":798,"start_character":32,"end_line":798,"end_character":46},"updated":"2016-10-10 16:14:18.000000000","message":"nit: I know this is copied from the neutron fixture, but this should be \"OSAPIFixture\".","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":795,"context_line":"class CinderFixture(fixtures.Fixture):"},{"line_number":796,"context_line":"    \"\"\"A fixture to volume operations\"\"\""},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    # the default project_id in OsaAPIFixtures"},{"line_number":799,"context_line":"    tenant_id \u003d \u00276f70656e737461636b20342065766572\u0027"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    SWAP_VOL \u003d \u0027a07f71dc-8151-4e7d-a0cc-cd24a3f11113\u0027"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_af9398a2","line":798,"range":{"start_line":798,"start_character":32,"end_line":798,"end_character":46},"in_reply_to":"1a95cdbc_5923ddbc","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":798,"context_line":"    # the default project_id in OsaAPIFixtures"},{"line_number":799,"context_line":"    tenant_id \u003d \u00276f70656e737461636b20342065766572\u0027"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    SWAP_VOL \u003d \u0027a07f71dc-8151-4e7d-a0cc-cd24a3f11113\u0027"},{"line_number":802,"context_line":"    SWAP_NEW_VOL \u003d \u0027227cc671-f30b-4488-96fd-7d0bf13648d8\u0027"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def __init__(self, test):"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_d91d2d74","line":801,"range":{"start_line":801,"start_character":4,"end_line":801,"end_character":12},"updated":"2016-10-10 16:14:18.000000000","message":"nit: SWAP_OLD_VOL to be more clear?","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":798,"context_line":"    # the default project_id in OsaAPIFixtures"},{"line_number":799,"context_line":"    tenant_id \u003d \u00276f70656e737461636b20342065766572\u0027"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    SWAP_VOL \u003d \u0027a07f71dc-8151-4e7d-a0cc-cd24a3f11113\u0027"},{"line_number":802,"context_line":"    SWAP_NEW_VOL \u003d \u0027227cc671-f30b-4488-96fd-7d0bf13648d8\u0027"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def __init__(self, test):"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_ef8d907c","line":801,"range":{"start_line":801,"start_character":4,"end_line":801,"end_character":12},"in_reply_to":"1a95cdbc_d91d2d74","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def test_volume_swap_server(self):"},{"line_number":376,"context_line":"        server \u003d self._boot_a_server("},{"line_number":377,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":378,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_VOL)"},{"line_number":381,"context_line":"        self.cinder.swap_volume_instance_uuid \u003d server[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_1c85c3cd","line":378,"range":{"start_line":377,"start_character":12,"end_line":378,"end_character":64},"updated":"2016-10-10 16:14:18.000000000","message":"At first I was going to say this test shouldn\u0027t care about the networks on the server at all, but I guess this does help validate the ip_addresses part of the sample, so it makes sense to have this.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dba789b7fd8b441ebcbe3ab56e4397dfb1846ed8","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def test_volume_swap_server(self):"},{"line_number":376,"context_line":"        server \u003d self._boot_a_server("},{"line_number":377,"context_line":"            extra_params\u003d{\u0027networks\u0027:"},{"line_number":378,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_VOL)"},{"line_number":381,"context_line":"        self.cinder.swap_volume_instance_uuid \u003d server[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_515f0872","line":378,"range":{"start_line":377,"start_character":12,"end_line":378,"end_character":64},"in_reply_to":"1a95cdbc_1c85c3cd","updated":"2016-10-11 07:48:29.000000000","message":"Yeah it is there only to have some meaningful IP address in the sample. But that part is not 100% relevant to this sample so this can be left out. Or even this can be moved to the _boot_as_server() as default behavior to avoid duplication.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":378,"context_line":"                          [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self._attach_volume_to_server(server, self.cinder.SWAP_VOL)"},{"line_number":381,"context_line":"        self.cinder.swap_volume_instance_uuid \u003d server[\u0027id\u0027]"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        self._volume_swap_server(server, self.cinder.SWAP_VOL,"},{"line_number":384,"context_line":"                                 self.cinder.SWAP_NEW_VOL)"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_5cd90bf2","line":381,"range":{"start_line":381,"start_character":8,"end_line":381,"end_character":45},"updated":"2016-10-10 16:14:18.000000000","message":"At first I was worried about controlling global state in the fixture like this, but since the fixture is per-test I think it should be OK...","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":388,"context_line":"        self._verify_notification("},{"line_number":389,"context_line":"            \u0027instance-volume_swap-start\u0027,"},{"line_number":390,"context_line":"            replacements\u003d{"},{"line_number":391,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":392,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_dcf35b71","line":389,"range":{"start_line":389,"start_character":12,"end_line":389,"end_character":40},"updated":"2016-10-10 16:14:18.000000000","message":"nit: you could re-use your constants for this.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        self.assertEqual(2, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":388,"context_line":"        self._verify_notification("},{"line_number":389,"context_line":"            \u0027instance-volume_swap-start\u0027,"},{"line_number":390,"context_line":"            replacements\u003d{"},{"line_number":391,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":392,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_125e6be9","line":389,"range":{"start_line":389,"start_character":12,"end_line":389,"end_character":40},"in_reply_to":"1a95cdbc_dcf35b71","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0a8cfc1ae4bbebb88d7e1a923856897d94134470","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class TestInstanceNotificationSample("},{"line_number":22,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":23,"context_line":"    EVENT_TYPE_SWAP_VOL_START \u003d \u0027instance-volume_swap-start\u0027"},{"line_number":24,"context_line":"    EVENT_TYPE_SWAP_VOL_END \u003d \u0027instance-volume_swap-end\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        self.flags(use_neutron\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":40,"id":"fa6399be_4a12dfb5","line":24,"range":{"start_line":23,"start_character":4,"end_line":24,"end_character":56},"updated":"2016-10-11 13:44:09.000000000","message":"Sorry I thought these were defined in nova.objects.fields somewhere, but it looks like it\u0027s actually multiple enums that make the notification. Hard-coding this is fine, but a tiny nit - I\u0027d move these to module-level scope rather than class scope as calling self.EVENT_TYPE_SWAP_VOL_START is a bit odd given it\u0027s a constant. Or just drop the hard-coded constant and do it inline in the test like you had it before, that\u0027s fine too.","commit_id":"47fb8b757994688a995ec3bdfa5dccc72f870f34"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"97525f29c7d183ea819d4ac69e3deb3a288a7fb0","unresolved":false,"context_lines":[{"line_number":1859,"context_line":"        self.assertEqual(volumes[new_volume_id][\u0027status\u0027], \u0027available\u0027)"},{"line_number":1860,"context_line":"        self.assertEqual(1, mock_notify.call_count)"},{"line_number":1861,"context_line":"        mock_notify.assert_called_once_with("},{"line_number":1862,"context_line":"            test.MatchType(context.RequestContext), instance2,"},{"line_number":1863,"context_line":"            self.compute.host,"},{"line_number":1864,"context_line":"            fields.NotificationAction.VOLUME_SWAP,"},{"line_number":1865,"context_line":"            fields.NotificationPhase.START,"}],"source_content_type":"text/x-python","patch_set":40,"id":"fa6399be_908348cc","line":1862,"range":{"start_line":1862,"start_character":12,"end_line":1862,"end_character":50},"updated":"2016-10-11 14:19:01.000000000","message":"Nit: self.context may have been easier here, I could be missing something.","commit_id":"47fb8b757994688a995ec3bdfa5dccc72f870f34"}],"nova/tests/unit/compute/test_compute_utils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a312e2ffca8a8d6554d15660b9ef4a8e759cce9","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        for attr in (\u0027display_name\u0027, \u0027created_at\u0027, \u0027launched_at\u0027,"},{"line_number":553,"context_line":"                     \u0027state\u0027, \u0027task_state\u0027):"},{"line_number":554,"context_line":"            self.assertIn(attr, payload, \"Key %s not in payload\" % attr)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        self.assertEqual(uuids.fake_image_ref, payload[\u0027image_uuid\u0027])"},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"1a95cdbc_5cae6b2e","line":554,"range":{"start_line":554,"start_character":41,"end_line":554,"end_character":71},"updated":"2016-10-10 16:14:18.000000000","message":"nit: You don\u0027t really need this. It probably makes the error message less useful actually.","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"78b479a2e86fdf11e4617577ce499dd192fb9b0b","unresolved":false,"context_lines":[{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        for attr in (\u0027display_name\u0027, \u0027created_at\u0027, \u0027launched_at\u0027,"},{"line_number":553,"context_line":"                     \u0027state\u0027, \u0027task_state\u0027):"},{"line_number":554,"context_line":"            self.assertIn(attr, payload, \"Key %s not in payload\" % attr)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        self.assertEqual(uuids.fake_image_ref, payload[\u0027image_uuid\u0027])"},{"line_number":557,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"fa6399be_4ffe7c6c","line":554,"range":{"start_line":554,"start_character":41,"end_line":554,"end_character":71},"in_reply_to":"1a95cdbc_5cae6b2e","updated":"2016-10-11 10:20:26.000000000","message":"Done","commit_id":"4e3c34431643b9b6fa96da9c99c1d65dc2c64619"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"97525f29c7d183ea819d4ac69e3deb3a288a7fb0","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":267,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-d94994d6043bb87fde603976ce811cba\u0027,"},{"line_number":268,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":269,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":270,"context_line":"    \u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-1043222e12be67403cab471ea1989b76\u0027,"},{"line_number":271,"context_line":"    \u0027InstancePayload\u0027: \u00271.0-4473793aa2a0a4083d328847f3ab638a\u0027,"},{"line_number":272,"context_line":"    \u0027InstanceStateUpdatePayload\u0027: \u00271.0-a934d04e1b314318e42e8062647edd11\u0027,"}],"source_content_type":"text/x-python","patch_set":40,"id":"fa6399be_504a9084","line":269,"range":{"start_line":269,"start_character":4,"end_line":269,"end_character":7},"updated":"2016-10-11 14:19:01.000000000","message":"Nit: a bit more indent might be better, but its a micro nit thing.","commit_id":"47fb8b757994688a995ec3bdfa5dccc72f870f34"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9aeda4467bd14c1f91cd5a901d1c92ed51035826","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1143,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-9b48376d41e39baf837ffec6f5e0d630\u0027,"},{"line_number":1144,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":1145,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1146,"context_line":"    \u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-534f77173031a6070cd7da9dc51cdc68\u0027,"},{"line_number":1147,"context_line":"    \u0027InstanceExternalEvent\u0027: \u00271.1-6e446ceaae5f475ead255946dd443417\u0027,"},{"line_number":1148,"context_line":"    \u0027InstanceFault\u0027: \u00271.2-7ef01f16f1084ad1304a513d6d410a38\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_c56b6e84","line":1145,"updated":"2016-06-09 14:59:24.000000000","message":"I think this still fits into 79 chars in the previous line","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6654c1b9fe35d33dce1f37713b1701936f4e414e","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1143,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-9b48376d41e39baf837ffec6f5e0d630\u0027,"},{"line_number":1144,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":1145,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1146,"context_line":"    \u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-534f77173031a6070cd7da9dc51cdc68\u0027,"},{"line_number":1147,"context_line":"    \u0027InstanceExternalEvent\u0027: \u00271.1-6e446ceaae5f475ead255946dd443417\u0027,"},{"line_number":1148,"context_line":"    \u0027InstanceFault\u0027: \u00271.2-7ef01f16f1084ad1304a513d6d410a38\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_624785bc","line":1145,"in_reply_to":"7aa08908_4d25ceac","updated":"2016-06-13 13:57:08.000000000","message":"Sorry, my bad.","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"ca13a5adcd08193c4991762a5bf6e142eb49ef81","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"    \u0027InstanceActionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1143,"context_line":"    \u0027InstanceActionPayload\u0027: \u00271.0-9b48376d41e39baf837ffec6f5e0d630\u0027,"},{"line_number":1144,"context_line":"    \u0027InstanceActionVolumeSwapNotification\u0027:"},{"line_number":1145,"context_line":"    \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":1146,"context_line":"    \u0027InstanceActionVolumeSwapPayload\u0027: \u00271.0-534f77173031a6070cd7da9dc51cdc68\u0027,"},{"line_number":1147,"context_line":"    \u0027InstanceExternalEvent\u0027: \u00271.1-6e446ceaae5f475ead255946dd443417\u0027,"},{"line_number":1148,"context_line":"    \u0027InstanceFault\u0027: \u00271.2-7ef01f16f1084ad1304a513d6d410a38\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_4d25ceac","line":1145,"in_reply_to":"7aa08908_c56b6e84","updated":"2016-06-09 22:03:44.000000000","message":"No.\nIt\u0027s 83 characters.","commit_id":"088d8b92eb4dd130caf3ec82ef991308692d74bf"}]}
