)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a1228749b156f0fb7df8c4417117b1ab8c0db441","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-11-04 20:19:11 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Transform instance.create notification"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I1f3ea8d74a2e59049447c3045a293ce0babfb427"},{"line_number":10,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9a629dbe_a0490091","line":8,"updated":"2016-11-07 10:15:24.000000000","message":"Please add a note to the commit message that the image_name extra info that is in the legacy notification is not in the versioned notification but the image_uuid in the versioned notification can be used to get the name of the image from glance if needed.","commit_id":"5374efc2f03196a2046cda74b4273ea3ca809010"}],"doc/notification_samples/instance-create-start.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b4aa21379f1fe25242c1a7cb94d52774cf4d3884","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            },"},{"line_number":40,"context_line":"            \"user_id\":\"fake\","},{"line_number":41,"context_line":"            \"uuid\":\"178b0921-8f85-4257-88b6-2e743b5a975c\","},{"line_number":42,"context_line":"            \"extra_usage_info\": {"},{"line_number":43,"context_line":"                \"image_name\": \"fakeimage123456\""},{"line_number":44,"context_line":"            }"},{"line_number":45,"context_line":"        },"},{"line_number":46,"context_line":"        \"nova_object.name\":\"ExtendedInstanceActionPayload\","},{"line_number":47,"context_line":"        \"nova_object.namespace\":\"nova\","}],"source_content_type":"application/json","patch_set":10,"id":"ba5da102_50743b34","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":13},"updated":"2016-10-28 08:54:49.000000000","message":"So it is really the name of the image referred by the image_uuid anyhow. This really seems just a duplicate. Let\u0027s not over complicate this with this duplication. Sorry to changing my time multiple times regarding this extra field. But now I feel we doesn\u0027t need this here.","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"}],"nova/compute/manager.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"749129c7b8570a9161a1e3c5ee854a2e1af52b0b","unresolved":false,"context_lines":[{"line_number":1884,"context_line":"            block_device_mapping, node, limits, filter_properties):"},{"line_number":1885,"context_line":""},{"line_number":1886,"context_line":"        image_name \u003d image.get(\u0027name\u0027)"},{"line_number":1887,"context_line":"        self._notify_about_instance_usage(context, instance, \u0027create.start\u0027,"},{"line_number":1888,"context_line":"                extra_usage_info\u003d{\u0027image_name\u0027: image_name})"},{"line_number":1889,"context_line":"        compute_utils.notify_about_instance_action(context, instance,"},{"line_number":1890,"context_line":"                self.host, action\u003dfields.NotificationAction.CREATE,"},{"line_number":1891,"context_line":"                phase\u003dfields.NotificationPhase.START)"},{"line_number":1892,"context_line":""},{"line_number":1893,"context_line":"        self._check_device_tagging(requested_networks, block_device_mapping)"},{"line_number":1894,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_3423bba8","line":1891,"range":{"start_line":1887,"start_character":0,"end_line":1891,"end_character":53},"updated":"2016-10-14 10:35:01.000000000","message":"I think we have to create an extended instance payload so it can accommodate for the extra information that is sent in the legacy notification (image_name here)","commit_id":"c5fcfa587e1491a7b9e1a6473cced6c4564e4d6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"749129c7b8570a9161a1e3c5ee854a2e1af52b0b","unresolved":false,"context_lines":[{"line_number":2007,"context_line":"                    \u0027create.error\u0027, fault\u003de)"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"        self._update_scheduler_instance_info(context, instance)"},{"line_number":2010,"context_line":"        self._notify_about_instance_usage(context, instance, \u0027create.end\u0027,"},{"line_number":2011,"context_line":"                extra_usage_info\u003d{\u0027message\u0027: _(\u0027Success\u0027)},"},{"line_number":2012,"context_line":"                network_info\u003dnetwork_info)"},{"line_number":2013,"context_line":"        compute_utils.notify_about_instance_action(context, instance,"},{"line_number":2014,"context_line":"                self.host, action\u003dfields.NotificationAction.CREATE,"},{"line_number":2015,"context_line":"                phase\u003dfields.NotificationPhase.END)"},{"line_number":2016,"context_line":""},{"line_number":2017,"context_line":"    @contextlib.contextmanager"},{"line_number":2018,"context_line":"    def _build_resources(self, context, instance, requested_networks,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_147a3777","line":2015,"range":{"start_line":2010,"start_character":0,"end_line":2015,"end_character":51},"updated":"2016-10-14 10:35:01.000000000","message":"I think we have to create an extended instance payload to accommodate the extra info that is sent in the legacy notification (network_info here). I think the  \u0027message:_(Success)\u0027 is not something we really need to send as the phase \u0027end\u0027 in the event type already makes it clear that the creation was succeeded in other case and \u0027instance.create.error\u0027 notification is sent. \n\nBTW, could you include the handling of instance.create.error into this or a subsequent patch?","commit_id":"c5fcfa587e1491a7b9e1a6473cced6c4564e4d6a"}],"nova/compute/utils.py":[{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"cc0064582cbdddb95dcf5ff05366d5400ac0b57b","unresolved":false,"context_lines":[{"line_number":339,"context_line":"    return ips"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"def notify_about_instance_action(context, instance, host, action, phase\u003dNone,"},{"line_number":343,"context_line":"                                 binary\u003d\u0027nova-compute\u0027):"},{"line_number":344,"context_line":"    \"\"\"Send versioned notification about the action made on the instance"},{"line_number":345,"context_line":"    :param instance: the instance which the action performed on"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_6a816e4a","line":342,"range":{"start_line":342,"start_character":4,"end_line":342,"end_character":32},"updated":"2016-10-27 06:52:32.000000000","message":"I would not change anything in this function.","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"cc0064582cbdddb95dcf5ff05366d5400ac0b57b","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    :param action: the name of the action"},{"line_number":348,"context_line":"    :param phase: the phase of the action"},{"line_number":349,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":350,"context_line":"    :param kwargs: any additional information"},{"line_number":351,"context_line":"    \"\"\""},{"line_number":352,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_4a090a2c","line":350,"range":{"start_line":350,"start_character":5,"end_line":350,"end_character":45},"updated":"2016-10-27 06:52:32.000000000","message":"No kwargs here.","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"43faef230e5ea9da78b7929ecd3a5c3e254974c7","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    :param action: the name of the action"},{"line_number":348,"context_line":"    :param phase: the phase of the action"},{"line_number":349,"context_line":"    :param binary: the binary emitting the notification"},{"line_number":350,"context_line":"    :param kwargs: any additional information"},{"line_number":351,"context_line":"    \"\"\""},{"line_number":352,"context_line":"    ips \u003d _get_instance_ips(instance)"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_fb69c48c","line":350,"range":{"start_line":350,"start_character":5,"end_line":350,"end_character":45},"in_reply_to":"ba5da102_4a090a2c","updated":"2016-10-27 14:23:58.000000000","message":"True, thanks for noticing. I\u0027ll fix it soon.","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b4aa21379f1fe25242c1a7cb94d52774cf4d3884","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":112,"context_line":"    fields \u003d {"},{"line_number":113,"context_line":"        \u0027fault\u0027: fields.ObjectField(\u0027ExceptionPayload\u0027, nullable\u003dTrue),"},{"line_number":114,"context_line":"        \u0027extra_usage_info\u0027: fields.DictOfNullableStringsField(nullable\u003dTrue),"},{"line_number":115,"context_line":"    }"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def __init__(self, instance, fault, ip_addresses, flavor,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_adfe2469","line":114,"updated":"2016-10-28 08:54:49.000000000","message":"The whole purpose of the versioned notification work is to define what is the structure of the payload. By having this Dict payload we loose this advantages as it can contain nearly anything.","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"}],"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":"749129c7b8570a9161a1e3c5ee854a2e1af52b0b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":92,"context_line":"        self._wait_until_deleted(server)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.assertEqual(4, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":95,"context_line":"        self._verify_notification("},{"line_number":96,"context_line":"            \u0027instance-delete-start\u0027,"},{"line_number":97,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_f11eb56e","line":94,"updated":"2016-10-14 10:35:01.000000000","message":"As this test named like create_delete you can simply assert the create notification here.","commit_id":"c5fcfa587e1491a7b9e1a6473cced6c4564e4d6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b4aa21379f1fe25242c1a7cb94d52774cf4d3884","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":97,"context_line":"        self._wait_until_deleted(server)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        self.assertEqual(4, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":100,"context_line":"        self._verify_notification("},{"line_number":101,"context_line":"            \u0027instance-delete-start\u0027,"},{"line_number":102,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5da102_adb62488","line":99,"updated":"2016-10-28 08:54:49.000000000","message":"You can simply move the testing of the create part here","commit_id":"bc925d3c0bcdf77402c30f9d686991b0a328abd4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ed8f656d3f3b28eddb90af87e73ceaa2d01a24c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self._wait_until_deleted(server)"},{"line_number":84,"context_line":"        self.assertEqual(6, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self._verify_notification("},{"line_number":87,"context_line":"            \u0027instance-create-start\u0027,"},{"line_number":88,"context_line":"            replacements\u003d{"},{"line_number":89,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":90,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":91,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":92,"context_line":"        self._verify_notification("},{"line_number":93,"context_line":"            \u0027instance-create-end\u0027,"},{"line_number":94,"context_line":"            replacements\u003d{"},{"line_number":95,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":96,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":97,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":98,"context_line":"        self._verify_notification("},{"line_number":99,"context_line":"            \u0027instance-delete-start\u0027,"},{"line_number":100,"context_line":"            replacements\u003d{"},{"line_number":101,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":102,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":103,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[2])"},{"line_number":104,"context_line":"        self._verify_notification("},{"line_number":105,"context_line":"            \u0027instance-shutdown-start\u0027,"},{"line_number":106,"context_line":"            replacements\u003d{"},{"line_number":107,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":108,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":109,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"},{"line_number":110,"context_line":"        self._verify_notification("},{"line_number":111,"context_line":"            \u0027instance-shutdown-end\u0027,"},{"line_number":112,"context_line":"            replacements\u003d{"},{"line_number":113,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":114,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":115,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[4])"},{"line_number":116,"context_line":"        self._verify_notification("},{"line_number":117,"context_line":"            \u0027instance-delete-end\u0027,"},{"line_number":118,"context_line":"            replacements\u003d{"},{"line_number":119,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":120,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":121,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[5])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _verify_instance_update_steps(self, steps, notifications,"},{"line_number":124,"context_line":"                                      initial\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_bd046ac6","line":121,"range":{"start_line":86,"start_character":8,"end_line":121,"end_character":60},"updated":"2016-11-22 19:46:16.000000000","message":"Could we make this cleaner by creating a list of the expected notifications in order, and then enumerating over them like:\n\nexpected_notifications \u003d [\u0027instance-create-start\u0027,...]\nfor idx, notification in enumerate(expected_notifications):\n    self._verify_notification(\n        notification,\n        replacements\u003d{\n            ...},\n        actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[idx])\n\nThen when we need to adjust the list we just change expected_notifications and don\u0027t have to redo all of this copy/paste.","commit_id":"825b8925bfc6fb0373213676bba9640b16db53c1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4085a33b91dc130eb4bdf1ce26ec96284e948799","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            \u0027instance-shutdown-end\u0027,"},{"line_number":93,"context_line":"            \u0027instance-delete-end\u0027"},{"line_number":94,"context_line":"        ]"},{"line_number":95,"context_line":"        for idx, notification in enumerate(expected_notifications):"},{"line_number":96,"context_line":"            self._verify_notification("},{"line_number":97,"context_line":"                notification,"},{"line_number":98,"context_line":"                replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a77a97e_f8c990ad","line":95,"updated":"2016-11-22 20:08:04.000000000","message":"++ good, this was starting to get super-repetitive :)","commit_id":"80bf21d8891df5de2798580d4fc40e13ffbf5fa0"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"749129c7b8570a9161a1e3c5ee854a2e1af52b0b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"notification_object_data \u003d {"},{"line_number":260,"context_line":"    \u0027AuditPeriodPayload\u0027: \u00271.0-28345f72ca9d805eeb61b2c2385805dd\u0027,"},{"line_number":261,"context_line":"    \u0027BandwidthPayload\u0027: \u00271.0-49278639296f9939ff2c8947b2078a82\u0027,"},{"line_number":262,"context_line":"    \u0027EventType\u0027: \u00271.3-a2eb53fd6dcdbae2b28a03051c509781\u0027,"},{"line_number":263,"context_line":"    \u0027ExceptionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":264,"context_line":"    \u0027ExceptionPayload\u0027: \u00271.0-4516ae282a55fe2fd5c754967ee6248b\u0027,"},{"line_number":265,"context_line":"    \u0027FlavorPayload\u0027: \u00271.0-8ad962ab0bafc7270f474c7dda0b7c20\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_f405c310","line":262,"range":{"start_line":262,"start_character":22,"end_line":262,"end_character":54},"updated":"2016-10-14 10:35:01.000000000","message":"I think it is against the rule to just update the hash. We have to bump the version of the EventType as there is now a new possible enum value.","commit_id":"c5fcfa587e1491a7b9e1a6473cced6c4564e4d6a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c41cda21212bf00ced70cec9a163fc81caf4ec1","unresolved":false,"context_lines":[{"line_number":259,"context_line":"notification_object_data \u003d {"},{"line_number":260,"context_line":"    \u0027AuditPeriodPayload\u0027: \u00271.0-28345f72ca9d805eeb61b2c2385805dd\u0027,"},{"line_number":261,"context_line":"    \u0027BandwidthPayload\u0027: \u00271.0-49278639296f9939ff2c8947b2078a82\u0027,"},{"line_number":262,"context_line":"    \u0027EventType\u0027: \u00271.3-a2eb53fd6dcdbae2b28a03051c509781\u0027,"},{"line_number":263,"context_line":"    \u0027ExceptionNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":264,"context_line":"    \u0027ExceptionPayload\u0027: \u00271.0-4516ae282a55fe2fd5c754967ee6248b\u0027,"},{"line_number":265,"context_line":"    \u0027FlavorPayload\u0027: \u00271.0-8ad962ab0bafc7270f474c7dda0b7c20\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_6729f889","line":262,"range":{"start_line":262,"start_character":22,"end_line":262,"end_character":54},"in_reply_to":"fa6399be_f405c310","updated":"2016-10-14 15:16:56.000000000","message":"I made a change where I pre-added the needed NotificationAction values so that we avoid merge conflict with each other bumping the version. Please rebase your change top of https://review.openstack.org/#/c/386659/","commit_id":"c5fcfa587e1491a7b9e1a6473cced6c4564e4d6a"}]}
