)]}'
{"doc/notification_samples/compute-node-create.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \"host\": \"host1\","},{"line_number":23,"context_line":"            \"service_id\": null,"},{"line_number":24,"context_line":"            \"local_gb\": 1028,"},{"line_number":25,"context_line":"            \"cpu_info\": \"{\\\"arch\\\": \\\"x86_64\\\", \\\"model\\\": \\\"Nehalem\\\", \\\"vendor\\\": \\\"Intel\\\", \\\"features\\\": [\\\"pge\\\", \\\"clflush\\\"], \\\"topology\\\": {\\\"cores\\\": 1, \\\"threads\\\": 1, \\\"sockets\\\": 4}}\","},{"line_number":26,"context_line":"            \"id\": 1"},{"line_number":27,"context_line":"        }"},{"line_number":28,"context_line":"    },"}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_b8e9a0b9","line":25,"updated":"2016-06-13 14:44:57.000000000","message":"This looks like a string containing a json serialized data structure. Can we create some direct, structured representation of it instead of this string?","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \"host\": \"host1\","},{"line_number":23,"context_line":"            \"service_id\": null,"},{"line_number":24,"context_line":"            \"local_gb\": 1028,"},{"line_number":25,"context_line":"            \"cpu_info\": \"{\\\"arch\\\": \\\"x86_64\\\", \\\"model\\\": \\\"Nehalem\\\", \\\"vendor\\\": \\\"Intel\\\", \\\"features\\\": [\\\"pge\\\", \\\"clflush\\\"], \\\"topology\\\": {\\\"cores\\\": 1, \\\"threads\\\": 1, \\\"sockets\\\": 4}}\","},{"line_number":26,"context_line":"            \"id\": 1"},{"line_number":27,"context_line":"        }"},{"line_number":28,"context_line":"    },"}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_f03163a3","line":25,"in_reply_to":"7aa08908_b8e9a0b9","updated":"2016-06-14 15:16:06.000000000","message":"The API is treating this as a string, so i think it\u0027s better to keep a string here.","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de899350a9f21bc738e2aff3f5e23e3797c9752c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \"host\": \"host1\","},{"line_number":23,"context_line":"            \"service_id\": null,"},{"line_number":24,"context_line":"            \"local_gb\": 1028,"},{"line_number":25,"context_line":"            \"cpu_info\": \"{\\\"arch\\\": \\\"x86_64\\\", \\\"model\\\": \\\"Nehalem\\\", \\\"vendor\\\": \\\"Intel\\\", \\\"features\\\": [\\\"pge\\\", \\\"clflush\\\"], \\\"topology\\\": {\\\"cores\\\": 1, \\\"threads\\\": 1, \\\"sockets\\\": 4}}\","},{"line_number":26,"context_line":"            \"id\": 1"},{"line_number":27,"context_line":"        }"},{"line_number":28,"context_line":"    },"}],"source_content_type":"application/json","patch_set":8,"id":"7aa08908_bddacb1b","line":25,"updated":"2016-06-15 09:00:58.000000000","message":"I still feel that this shall be structured data as one of the reason we create the versioned notification is to define what data we are sending. @John, @Ryan what do you think?","commit_id":"e26bbd627c8b6c4d3a43a3678f6f96fa62128254"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c3223ed44e68f3422dc3f6d5aa2a1029ba8325bb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \"host\": \"host1\","},{"line_number":23,"context_line":"            \"service_id\": null,"},{"line_number":24,"context_line":"            \"local_gb\": 1028,"},{"line_number":25,"context_line":"            \"cpu_info\": \"{\\\"arch\\\": \\\"x86_64\\\", \\\"model\\\": \\\"Nehalem\\\", \\\"vendor\\\": \\\"Intel\\\", \\\"features\\\": [\\\"pge\\\", \\\"clflush\\\"], \\\"topology\\\": {\\\"cores\\\": 1, \\\"threads\\\": 1, \\\"sockets\\\": 4}}\","},{"line_number":26,"context_line":"            \"id\": 1"},{"line_number":27,"context_line":"        }"},{"line_number":28,"context_line":"    },"}],"source_content_type":"application/json","patch_set":8,"id":"7aa08908_25a872db","line":25,"in_reply_to":"7aa08908_bddacb1b","updated":"2016-06-15 13:15:12.000000000","message":"Okay, will wait for what\u0027s others think, if all agree to change, i\u0027ll do that in the next patch.","commit_id":"e26bbd627c8b6c4d3a43a3678f6f96fa62128254"}],"doc/notification_samples/compute-node.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"94a4933946e7dcbcde79150640a63fbbb6a4401c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \u0027nova_object.version\u0027: \u00271.0\u0027,"},{"line_number":6,"context_line":"        \u0027nova_object.name\u0027: \u0027ComputeNodePayload\u0027,"},{"line_number":7,"context_line":"        \u0027nova_object.data\u0027: {"},{"line_number":8,"context_line":"            \u0027cpu_info\u0027: \u0027{}\u0027,"},{"line_number":9,"context_line":"            \u0027free_disk_gb\u0027: 600000,"},{"line_number":10,"context_line":"            \u0027id\u0027: 1,"},{"line_number":11,"context_line":"            \u0027uuid\u0027: \u0027f38269fa-b17a-4176-96ed-dfdf3a8e423a\u0027,"}],"source_content_type":"application/json","patch_set":4,"id":"7aa08908_50f57ec9","line":8,"updated":"2016-06-09 15:58:03.000000000","message":"It would be good to generate such notification that has content in the cpu_info field","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0fb9c09a9f3f40b8dbe3e7dc6c29a994686b883","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \u0027nova_object.version\u0027: \u00271.0\u0027,"},{"line_number":6,"context_line":"        \u0027nova_object.name\u0027: \u0027ComputeNodePayload\u0027,"},{"line_number":7,"context_line":"        \u0027nova_object.data\u0027: {"},{"line_number":8,"context_line":"            \u0027cpu_info\u0027: \u0027{}\u0027,"},{"line_number":9,"context_line":"            \u0027free_disk_gb\u0027: 600000,"},{"line_number":10,"context_line":"            \u0027id\u0027: 1,"},{"line_number":11,"context_line":"            \u0027uuid\u0027: \u0027f38269fa-b17a-4176-96ed-dfdf3a8e423a\u0027,"}],"source_content_type":"application/json","patch_set":4,"id":"7aa08908_3f313e0c","line":8,"in_reply_to":"7aa08908_50f57ec9","updated":"2016-06-12 03:57:40.000000000","message":"Done","commit_id":"c49ea97075798b20445166def3b67ba63242243d"}],"nova/notifications/objects/compute_node.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"94a4933946e7dcbcde79150640a63fbbb6a4401c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":32,"context_line":"class ComputeNodePayload(base.NotificationPayloadBase):"},{"line_number":33,"context_line":"    SCHEMA \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: (\u0027compute_node\u0027, \u0027id\u0027),"},{"line_number":35,"context_line":"        \u0027uuid\u0027: (\u0027compute_node\u0027, \u0027uuid\u0027),"},{"line_number":36,"context_line":"        \u0027service_id\u0027: (\u0027compute_node\u0027, \u0027service_id\u0027),"},{"line_number":37,"context_line":"        \u0027host\u0027: (\u0027compute_node\u0027, \u0027host\u0027),"},{"line_number":38,"context_line":"        \u0027vcpus\u0027: (\u0027compute_node\u0027, \u0027vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_f63582a8","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":41},"updated":"2016-06-09 15:58:03.000000000","message":"Do we need both the id, and the uuid? Would it be enough to have the uuid only?","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0fb9c09a9f3f40b8dbe3e7dc6c29a994686b883","unresolved":false,"context_lines":[{"line_number":31,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":32,"context_line":"class ComputeNodePayload(base.NotificationPayloadBase):"},{"line_number":33,"context_line":"    SCHEMA \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: (\u0027compute_node\u0027, \u0027id\u0027),"},{"line_number":35,"context_line":"        \u0027uuid\u0027: (\u0027compute_node\u0027, \u0027uuid\u0027),"},{"line_number":36,"context_line":"        \u0027service_id\u0027: (\u0027compute_node\u0027, \u0027service_id\u0027),"},{"line_number":37,"context_line":"        \u0027host\u0027: (\u0027compute_node\u0027, \u0027host\u0027),"},{"line_number":38,"context_line":"        \u0027vcpus\u0027: (\u0027compute_node\u0027, \u0027vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_1f4d6299","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":41},"in_reply_to":"7aa08908_f63582a8","updated":"2016-06-12 03:57:40.000000000","message":"We need to have id here, because the api is using id instead uuid. I\u0027ll remove the uuid field.","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"94a4933946e7dcbcde79150640a63fbbb6a4401c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    # Version 1.0: Initial version"},{"line_number":56,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":57,"context_line":"    fields \u003d {"},{"line_number":58,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":60,"context_line":"        \u0027service_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_36570acc","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":35},"updated":"2016-06-09 15:58:03.000000000","message":"same question as above","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0fb9c09a9f3f40b8dbe3e7dc6c29a994686b883","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    # Version 1.0: Initial version"},{"line_number":56,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":57,"context_line":"    fields \u003d {"},{"line_number":58,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":59,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":60,"context_line":"        \u0027service_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_7f446673","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":35},"in_reply_to":"7aa08908_36570acc","updated":"2016-06-12 03:57:40.000000000","message":"uuid removed","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.objects import fields"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@base.notification_sample(\u0027compute-node-update.json\u0027)"},{"line_number":22,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class ComputeNodeNotification(base.NotificationBase):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_38edb0b7","line":21,"updated":"2016-06-13 14:44:57.000000000","message":"Please add the other compute-node-create.json here as well.","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.objects import fields"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@base.notification_sample(\u0027compute-node-update.json\u0027)"},{"line_number":22,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class ComputeNodeNotification(base.NotificationBase):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_85a1c296","line":21,"in_reply_to":"7aa08908_38edb0b7","updated":"2016-06-14 15:16:06.000000000","message":"Done","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":84,"context_line":"class ComputeNodeDeleteNotification(base.NotificationBase):"},{"line_number":85,"context_line":"    # Version 1.0: Initial version"},{"line_number":86,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":87,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_9861443c","line":84,"updated":"2016-06-13 14:44:57.000000000","message":"please decorate it with the compute-node-delete.json sample","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"@nova_base.NovaObjectRegistry.register"},{"line_number":84,"context_line":"class ComputeNodeDeleteNotification(base.NotificationBase):"},{"line_number":85,"context_line":"    # Version 1.0: Initial version"},{"line_number":86,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":87,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_c5a74aa5","line":84,"in_reply_to":"7aa08908_9861443c","updated":"2016-06-14 15:16:06.000000000","message":"Done","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"}],"nova/objects/compute_node.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6039cb8fcc0aeb4ff544af418d3c6142ee0143d0","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        updated \u003d False"},{"line_number":413,"context_line":"        # Notification will be sent only if any of the specified fields"},{"line_number":414,"context_line":"        # changed to avoid unnecessary notifications with the same content."},{"line_number":415,"context_line":"        keys \u003d [\"vcpus\", \"memory_mb\", \"local_gb\", \"vcpus_used\","},{"line_number":416,"context_line":"                \"memory_mb_used\", \"local_gb_used\", \"hypervisor_hostname\","},{"line_number":417,"context_line":"                \"disk_available_least\", \"running_vms\", \"current_workload\"]"},{"line_number":418,"context_line":"        old \u003d ComputeNode.get_by_id(self._context, self.id)"},{"line_number":419,"context_line":"        if any([updates.get(key) and"},{"line_number":420,"context_line":"                getattr(old, key, None) !\u003d updates.get(key) for key in keys]):"},{"line_number":421,"context_line":"            updated \u003d True"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        db_compute \u003d db.compute_node_update(self._context, self.id, updates)"},{"line_number":424,"context_line":"        # NOTE(danms): compute_node_update() operates on (and returns) the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_664a7285","line":421,"range":{"start_line":415,"start_character":0,"end_line":421,"end_character":26},"updated":"2016-06-06 09:41:31.000000000","message":"I think\n    updated \u003d any([key in updates for key in keys])\nis enough as if a key is in the updates that means the given field is updated.","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a069d956a66385348569e700c536215f341235e7","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        updated \u003d False"},{"line_number":413,"context_line":"        # Notification will be sent only if any of the specified fields"},{"line_number":414,"context_line":"        # changed to avoid unnecessary notifications with the same content."},{"line_number":415,"context_line":"        keys \u003d [\"vcpus\", \"memory_mb\", \"local_gb\", \"vcpus_used\","},{"line_number":416,"context_line":"                \"memory_mb_used\", \"local_gb_used\", \"hypervisor_hostname\","},{"line_number":417,"context_line":"                \"disk_available_least\", \"running_vms\", \"current_workload\"]"},{"line_number":418,"context_line":"        old \u003d ComputeNode.get_by_id(self._context, self.id)"},{"line_number":419,"context_line":"        if any([updates.get(key) and"},{"line_number":420,"context_line":"                getattr(old, key, None) !\u003d updates.get(key) for key in keys]):"},{"line_number":421,"context_line":"            updated \u003d True"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        db_compute \u003d db.compute_node_update(self._context, self.id, updates)"},{"line_number":424,"context_line":"        # NOTE(danms): compute_node_update() operates on (and returns) the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_50ca506e","line":421,"range":{"start_line":415,"start_character":0,"end_line":421,"end_character":26},"in_reply_to":"7aa08908_664a7285","updated":"2016-06-07 08:32:32.000000000","message":"updates will alway be the whole compute node object here [1]: https://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L684-L684","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6039cb8fcc0aeb4ff544af418d3c6142ee0143d0","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.supported_hv_specs \u003d [objects.HVSpec.from_list(s) for s in si]"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _send_notification(self, action):"},{"line_number":460,"context_line":"        if action in [fields.NotificationAction.CREATE,"},{"line_number":461,"context_line":"                      fields.NotificationAction.UPDATE]:"},{"line_number":462,"context_line":"            payload \u003d ComputeNodePayload(self)"},{"line_number":463,"context_line":"            ComputeNodeNotification("},{"line_number":464,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":465,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":466,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":467,"context_line":"                                                  action\u003daction),"},{"line_number":468,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":469,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":470,"context_line":"        if action \u003d\u003d fields.NotificationAction.DELETE:"},{"line_number":471,"context_line":"            payload \u003d ComputeNodeDeletePayload(self)"},{"line_number":472,"context_line":"            ComputeNodeDeleteNotification("},{"line_number":473,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":474,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":475,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":476,"context_line":"                                                  action\u003daction),"},{"line_number":477,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":478,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_a1dd6444","line":478,"range":{"start_line":460,"start_character":1,"end_line":478,"end_character":52},"updated":"2016-06-06 09:41:31.000000000","message":"I think we can avoid the repetition with the following:\n\ntype_map \u003d {  # put this to the class level to make it static\n  fields.NotificationAction.CREATE:\n  (ComputeNodeNotification, ComputeNodePayload),\n  fields.NotificationAction.UPDATE:\n  (ComputeNodeNotification, ComputeNodePayload),\n  fields.NotificationAction.DELETE:\n  (ComputeNodeDeleteNotification, ComputeNodeDeletePayload),\n}\n\n# then in the _send_notification\n\nnotification_type \u003d type_map[action][0]\npayload_type \u003d type_map[action][1]\npayload \u003d payload_type(self)\nnotification_type(\n  publisher\u003dnotification.NotificationPublisher(\n    host\u003dself.host, binary\u003d\"nova-compute\"),\n  event_type\u003dnotification.EventType(\n    object\u003d\"compute_node\",action\u003daction),\n  priority\u003dfields.NotificationPriority.INFO,\n  payload\u003dpayload).emit(self._context)","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a069d956a66385348569e700c536215f341235e7","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.supported_hv_specs \u003d [objects.HVSpec.from_list(s) for s in si]"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _send_notification(self, action):"},{"line_number":460,"context_line":"        if action in [fields.NotificationAction.CREATE,"},{"line_number":461,"context_line":"                      fields.NotificationAction.UPDATE]:"},{"line_number":462,"context_line":"            payload \u003d ComputeNodePayload(self)"},{"line_number":463,"context_line":"            ComputeNodeNotification("},{"line_number":464,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":465,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":466,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":467,"context_line":"                                                  action\u003daction),"},{"line_number":468,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":469,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":470,"context_line":"        if action \u003d\u003d fields.NotificationAction.DELETE:"},{"line_number":471,"context_line":"            payload \u003d ComputeNodeDeletePayload(self)"},{"line_number":472,"context_line":"            ComputeNodeDeleteNotification("},{"line_number":473,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":474,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":475,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":476,"context_line":"                                                  action\u003daction),"},{"line_number":477,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":478,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_c57963fe","line":478,"range":{"start_line":460,"start_character":1,"end_line":478,"end_character":52},"in_reply_to":"7aa08908_a1dd6444","updated":"2016-06-07 08:32:32.000000000","message":"The unit tests will fail if i using type_map, no sure what the reason is:(\n\nBut it works fine using the following code:\n\n        if action in [fields.NotificationAction.CREATE,\n                      fields.NotificationAction.UPDATE]:\n            notification_type \u003d cn_notification.ComputeNodeNotification\n            payload_type \u003d cn_notification.ComputeNodePayload\n        if action \u003d\u003d fields.NotificationAction.DELETE:\n            notification_type \u003d cn_notification.ComputeNodeDeleteNotification\n            payload_type \u003d cn_notification.ComputeNodeDeletePayload\n\n        payload \u003d payload_type(self)\n        notification_type(\n            publisher\u003dnotification.NotificationPublisher(\n                host\u003dself.host, binary\u003d\"nova-compute\"),\n            event_type\u003dnotification.EventType(object\u003d\"compute_node\",\n                                              action\u003daction),\n            priority\u003dfields.NotificationPriority.INFO,\n            payload\u003dpayload).emit(self._context)","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"03ce350d18e3cb7a50095d3e937276aa413e456b","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.supported_hv_specs \u003d [objects.HVSpec.from_list(s) for s in si]"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def _send_notification(self, action):"},{"line_number":460,"context_line":"        if action in [fields.NotificationAction.CREATE,"},{"line_number":461,"context_line":"                      fields.NotificationAction.UPDATE]:"},{"line_number":462,"context_line":"            payload \u003d ComputeNodePayload(self)"},{"line_number":463,"context_line":"            ComputeNodeNotification("},{"line_number":464,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":465,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":466,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":467,"context_line":"                                                  action\u003daction),"},{"line_number":468,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":469,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":470,"context_line":"        if action \u003d\u003d fields.NotificationAction.DELETE:"},{"line_number":471,"context_line":"            payload \u003d ComputeNodeDeletePayload(self)"},{"line_number":472,"context_line":"            ComputeNodeDeleteNotification("},{"line_number":473,"context_line":"                publisher\u003dnotification.NotificationPublisher("},{"line_number":474,"context_line":"                    host\u003dself.host, binary\u003d\"nova-compute\"),"},{"line_number":475,"context_line":"                event_type\u003dnotification.EventType(object\u003d\"compute_node\","},{"line_number":476,"context_line":"                                                  action\u003daction),"},{"line_number":477,"context_line":"                priority\u003dfields.NotificationPriority.INFO,"},{"line_number":478,"context_line":"                payload\u003dpayload).emit(self._context)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"@base.NovaObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_d615e69b","line":478,"range":{"start_line":460,"start_character":1,"end_line":478,"end_character":52},"in_reply_to":"7aa08908_c57963fe","updated":"2016-06-09 16:02:08.000000000","message":"The goal of my comment was to avoid duplication. you managed to avoid it so I\u0027m happy with it. :)","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6039cb8fcc0aeb4ff544af418d3c6142ee0143d0","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"@notification.notification_sample(\u0027compute-node.json\u0027)"},{"line_number":545,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":546,"context_line":"class ComputeNodeNotification(notification.NotificationBase):"},{"line_number":547,"context_line":"    # Version 1.0: Initial version"},{"line_number":548,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":549,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_a15a8481","line":546,"updated":"2016-06-06 09:41:31.000000000","message":"The notification related object shall be moved under nova/notifications/objects/. Please rebase this patch top of https://review.openstack.org/#/c/309454/ to align with the moving.","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a069d956a66385348569e700c536215f341235e7","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"@notification.notification_sample(\u0027compute-node.json\u0027)"},{"line_number":545,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":546,"context_line":"class ComputeNodeNotification(notification.NotificationBase):"},{"line_number":547,"context_line":"    # Version 1.0: Initial version"},{"line_number":548,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":549,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_05840bd2","line":546,"in_reply_to":"7aa08908_a15a8481","updated":"2016-06-07 08:32:32.000000000","message":"Done","commit_id":"24df3abb31fd5599f43aa5d8bd55354a04dfa4ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b47cd5a339f7444f6990c35b782927816035d699","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        # changed to avoid unnecessary notifications with the same content."},{"line_number":416,"context_line":"        keys \u003d [\"vcpus\", \"memory_mb\", \"local_gb\", \"vcpus_used\","},{"line_number":417,"context_line":"                \"memory_mb_used\", \"local_gb_used\", \"hypervisor_hostname\","},{"line_number":418,"context_line":"                \"disk_available_least\", \"running_vms\", \"current_workload\"]"},{"line_number":419,"context_line":"        old \u003d ComputeNode.get_by_id(self._context, self.id)"},{"line_number":420,"context_line":"        if any([updates.get(key) and"},{"line_number":421,"context_line":"                getattr(old, key, None) !\u003d updates.get(key) for key in keys]):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_ae36534e","line":418,"updated":"2016-06-30 14:38:30.000000000","message":"Given all this data is moving into the inventory tables, I don\u0027t think we will want to track all these.\n\nI think you are much better off to start looking at this object, for when things like disabled, and disabled_reason change, service_version, etc:\nhttps://github.com/openstack/nova/blob/master/nova/objects/service.py#L122","commit_id":"9ebd3304c64d29da43d753dafabecf5599bf60fd"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"acb307e23199de894c89aa10b8fc13890d7a7eeb","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        # changed to avoid unnecessary notifications with the same content."},{"line_number":416,"context_line":"        keys \u003d [\"vcpus\", \"memory_mb\", \"local_gb\", \"vcpus_used\","},{"line_number":417,"context_line":"                \"memory_mb_used\", \"local_gb_used\", \"hypervisor_hostname\","},{"line_number":418,"context_line":"                \"disk_available_least\", \"running_vms\", \"current_workload\"]"},{"line_number":419,"context_line":"        old \u003d ComputeNode.get_by_id(self._context, self.id)"},{"line_number":420,"context_line":"        if any([updates.get(key) and"},{"line_number":421,"context_line":"                getattr(old, key, None) !\u003d updates.get(key) for key in keys]):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_1ebe9964","line":418,"in_reply_to":"3aaa91ec_ae36534e","updated":"2016-07-01 01:33:03.000000000","message":"Done","commit_id":"9ebd3304c64d29da43d753dafabecf5599bf60fd"}],"nova/objects/fields.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"94a4933946e7dcbcde79150640a63fbbb6a4401c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"    UPDATE \u003d \u0027update\u0027"},{"line_number":601,"context_line":"    DELETE \u003d \u0027delete\u0027"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    ALL \u003d (CREATE, UPDATE, DELETE)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def __init__(self):"},{"line_number":606,"context_line":"        super(NotificationAction, self).__init__("}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_112498ad","line":603,"updated":"2016-06-09 15:58:03.000000000","message":"EventType needs a version bump because of this.","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0fb9c09a9f3f40b8dbe3e7dc6c29a994686b883","unresolved":false,"context_lines":[{"line_number":600,"context_line":"    UPDATE \u003d \u0027update\u0027"},{"line_number":601,"context_line":"    DELETE \u003d \u0027delete\u0027"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    ALL \u003d (CREATE, UPDATE, DELETE)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def __init__(self):"},{"line_number":606,"context_line":"        super(NotificationAction, self).__init__("}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_df53da37","line":603,"in_reply_to":"7aa08908_112498ad","updated":"2016-06-12 03:57:40.000000000","message":"Done","commit_id":"c49ea97075798b20445166def3b67ba63242243d"}],"nova/tests/functional/notification_sample_tests/test_compute_node.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":37,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        with open(self._get_notification_sample(sample_file_name)) as sample:"},{"line_number":40,"context_line":"            sample_data \u003d sample.read()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        sample_obj \u003d jsonutils.loads(sample_data)"},{"line_number":43,"context_line":"        self._apply_replacements(replacements, sample_obj)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Pop out the host_ip, it\u0027s host related."},{"line_number":46,"context_line":"        if sample_obj.get(\u0027payload\u0027,"},{"line_number":47,"context_line":"                          {}).get(\u0027nova_object.data\u0027, {}).get(\u0027host_ip\u0027):"},{"line_number":48,"context_line":"            sample_obj[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":49,"context_line":"            notification[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":50,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027)"},{"line_number":53,"context_line":"    def test_compute_node_create(self, fake_save):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_9864a422","line":50,"range":{"start_line":39,"start_character":0,"end_line":50,"end_character":54},"updated":"2016-06-13 14:44:57.000000000","message":"It seems like a duplication of the _verify_notification call in the base class. If you need to ignore the value of the host_ip in the sample matching then you can use the ANY value from this patch https://review.openstack.org/#/c/321610","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":37,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        with open(self._get_notification_sample(sample_file_name)) as sample:"},{"line_number":40,"context_line":"            sample_data \u003d sample.read()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        sample_obj \u003d jsonutils.loads(sample_data)"},{"line_number":43,"context_line":"        self._apply_replacements(replacements, sample_obj)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Pop out the host_ip, it\u0027s host related."},{"line_number":46,"context_line":"        if sample_obj.get(\u0027payload\u0027,"},{"line_number":47,"context_line":"                          {}).get(\u0027nova_object.data\u0027, {}).get(\u0027host_ip\u0027):"},{"line_number":48,"context_line":"            sample_obj[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":49,"context_line":"            notification[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":50,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027)"},{"line_number":53,"context_line":"    def test_compute_node_create(self, fake_save):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_b08a3b62","line":50,"range":{"start_line":39,"start_character":0,"end_line":50,"end_character":54},"in_reply_to":"7aa08908_9864a422","updated":"2016-06-14 15:16:06.000000000","message":"Cool, thanks","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            notification[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":50,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027)"},{"line_number":53,"context_line":"    def test_compute_node_create(self, fake_save):"},{"line_number":54,"context_line":"        # Start a new compute node to simulate the create notification."},{"line_number":55,"context_line":"        # Fake out the save method to ignore the update notification."},{"line_number":56,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":57,"context_line":"        self._verify_notification(\u0027compute-node-create\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_4211a651","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":1},"updated":"2016-06-13 14:44:57.000000000","message":"I think it would be nice if we would do it without the mock. You can ignore the update notification by specifying which received notification shall be used for the comparison. See the enhancement on the _verify_notification in this patch https://review.openstack.org/#/c/321610","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            notification[\u0027payload\u0027][\u0027nova_object.data\u0027].pop(\u0027host_ip\u0027)"},{"line_number":50,"context_line":"        self.assertJsonEqual(sample_obj, notification)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    @mock.patch(\u0027nova.objects.compute_node.ComputeNode.save\u0027)"},{"line_number":53,"context_line":"    def test_compute_node_create(self, fake_save):"},{"line_number":54,"context_line":"        # Start a new compute node to simulate the create notification."},{"line_number":55,"context_line":"        # Fake out the save method to ignore the update notification."},{"line_number":56,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":57,"context_line":"        self._verify_notification(\u0027compute-node-create\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_50f037fd","line":56,"range":{"start_line":52,"start_character":0,"end_line":56,"end_character":1},"in_reply_to":"7aa08908_4211a651","updated":"2016-06-14 15:16:06.000000000","message":"Done","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":61,"context_line":"    @mock.patch(\u0027nova.db.compute_node_update\u0027,"},{"line_number":62,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":63,"context_line":"    def test_compute_node_update(self, mock_update, mock_get):"},{"line_number":64,"context_line":"        compute \u003d compute_node.ComputeNode(context\u003dself.context)"},{"line_number":65,"context_line":"        compute.id \u003d 123"},{"line_number":66,"context_line":"        compute.vcpus_used \u003d 3"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_e2d09255","line":63,"updated":"2016-06-13 14:44:57.000000000","message":"I\u0027m wondering that we might be able to do this without mocking as well. For example if an instance is booted on this host then we can expect that the vcpus_used field is updated and the update notification is emitted.","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":61,"context_line":"    @mock.patch(\u0027nova.db.compute_node_update\u0027,"},{"line_number":62,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":63,"context_line":"    def test_compute_node_update(self, mock_update, mock_get):"},{"line_number":64,"context_line":"        compute \u003d compute_node.ComputeNode(context\u003dself.context)"},{"line_number":65,"context_line":"        compute.id \u003d 123"},{"line_number":66,"context_line":"        compute.vcpus_used \u003d 3"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_a10acf76","line":63,"in_reply_to":"7aa08908_e2d09255","updated":"2016-06-14 15:16:06.000000000","message":"Done","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3ec7ba896aedffbf1419e4b7971b1a83afc4d76e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get\u0027,"},{"line_number":71,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":72,"context_line":"    @mock.patch(\u0027nova.db.compute_node_delete\u0027)"},{"line_number":73,"context_line":"    def test_compute_node_destroy(self, mock_delete, mock_get):"},{"line_number":74,"context_line":"        compute \u003d compute_node.ComputeNode(context\u003dself.context)"},{"line_number":75,"context_line":"        compute.id \u003d 123"},{"line_number":76,"context_line":"        compute.host \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_824f0e33","line":73,"updated":"2016-06-13 14:44:57.000000000","message":"I think here we need the mocking to simulate the compute delete.","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"324e1951080a9bbfb3d9b952a4b19544c49dc6e0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get\u0027,"},{"line_number":71,"context_line":"                return_value\u003dtest_compute_node.fake_compute_node)"},{"line_number":72,"context_line":"    @mock.patch(\u0027nova.db.compute_node_delete\u0027)"},{"line_number":73,"context_line":"    def test_compute_node_destroy(self, mock_delete, mock_get):"},{"line_number":74,"context_line":"        compute \u003d compute_node.ComputeNode(context\u003dself.context)"},{"line_number":75,"context_line":"        compute.id \u003d 123"},{"line_number":76,"context_line":"        compute.host \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_dfd37602","line":73,"in_reply_to":"7aa08908_824f0e33","updated":"2016-06-14 15:16:06.000000000","message":"mock removed","commit_id":"63cb6746f8a9d91afadf871a0c7a77c995b0ba7b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de899350a9f21bc738e2aff3f5e23e3797c9752c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                              % flavor[\u0027id\u0027])"},{"line_number":108,"context_line":"        server[\u0027name\u0027] \u003d name"},{"line_number":109,"context_line":"        return server"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_compute_node_create(self):"},{"line_number":112,"context_line":"        # Start a new compute node to simulate the create notification."},{"line_number":113,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_ddb6b7f8","line":110,"updated":"2016-06-15 09:00:58.000000000","message":"Instead of duplicating the server boot code I think it would be better to move it to the base class. I think I can do the moving in the https://review.openstack.org/#/c/313654 and you can base on that patch to avoid the duplication.","commit_id":"e26bbd627c8b6c4d3a43a3678f6f96fa62128254"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c3223ed44e68f3422dc3f6d5aa2a1029ba8325bb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                              % flavor[\u0027id\u0027])"},{"line_number":108,"context_line":"        server[\u0027name\u0027] \u003d name"},{"line_number":109,"context_line":"        return server"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_compute_node_create(self):"},{"line_number":112,"context_line":"        # Start a new compute node to simulate the create notification."},{"line_number":113,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_252352a9","line":110,"in_reply_to":"7aa08908_5538dbd4","updated":"2016-06-15 13:15:12.000000000","message":"Done","commit_id":"e26bbd627c8b6c4d3a43a3678f6f96fa62128254"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"223ca08a8568968481c67c2367a45fd2b4a59b4d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                              % flavor[\u0027id\u0027])"},{"line_number":108,"context_line":"        server[\u0027name\u0027] \u003d name"},{"line_number":109,"context_line":"        return server"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_compute_node_create(self):"},{"line_number":112,"context_line":"        # Start a new compute node to simulate the create notification."},{"line_number":113,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_5538dbd4","line":110,"in_reply_to":"7aa08908_ddb6b7f8","updated":"2016-06-15 09:47:54.000000000","message":"I did the move in the last patch set of https://review.openstack.org/#/c/313654","commit_id":"e26bbd627c8b6c4d3a43a3678f6f96fa62128254"}],"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":"94a4933946e7dcbcde79150640a63fbbb6a4401c","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"    \u0027EC2InstanceMapping\u0027: \u00271.0-a4556eb5c5e94c045fe84f49cf71644f\u0027,"},{"line_number":1121,"context_line":"    \u0027EC2SnapshotMapping\u0027: \u00271.0-47e7ddabe1af966dce0cfd0ed6cd7cd1\u0027,"},{"line_number":1122,"context_line":"    \u0027EC2VolumeMapping\u0027: \u00271.0-5b713751d6f97bad620f3378a521020d\u0027,"},{"line_number":1123,"context_line":"    \u0027EventType\u0027: \u00271.0-00fb1d42b557d80318fff0796b1968cf\u0027,"},{"line_number":1124,"context_line":"    \u0027FixedIP\u0027: \u00271.14-53e1c10b539f1a82fe83b1af4720efae\u0027,"},{"line_number":1125,"context_line":"    \u0027FixedIPList\u0027: \u00271.14-87a39361c8f08f059004d6b15103cdfd\u0027,"},{"line_number":1126,"context_line":"    \u0027Flavor\u0027: \u00271.1-b6bb7a730a79d720344accefafacf7ee\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_51abc0d6","line":1123,"updated":"2016-06-09 15:58:03.000000000","message":"The hash changed because you added new NotificationAction values. You have to bump the minor version of EventType. This will be a potential merge conflict with the instance.delete and instance.update patches but we have to live with it.","commit_id":"c49ea97075798b20445166def3b67ba63242243d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0fb9c09a9f3f40b8dbe3e7dc6c29a994686b883","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"    \u0027EC2InstanceMapping\u0027: \u00271.0-a4556eb5c5e94c045fe84f49cf71644f\u0027,"},{"line_number":1121,"context_line":"    \u0027EC2SnapshotMapping\u0027: \u00271.0-47e7ddabe1af966dce0cfd0ed6cd7cd1\u0027,"},{"line_number":1122,"context_line":"    \u0027EC2VolumeMapping\u0027: \u00271.0-5b713751d6f97bad620f3378a521020d\u0027,"},{"line_number":1123,"context_line":"    \u0027EventType\u0027: \u00271.0-00fb1d42b557d80318fff0796b1968cf\u0027,"},{"line_number":1124,"context_line":"    \u0027FixedIP\u0027: \u00271.14-53e1c10b539f1a82fe83b1af4720efae\u0027,"},{"line_number":1125,"context_line":"    \u0027FixedIPList\u0027: \u00271.14-87a39361c8f08f059004d6b15103cdfd\u0027,"},{"line_number":1126,"context_line":"    \u0027Flavor\u0027: \u00271.1-b6bb7a730a79d720344accefafacf7ee\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_1f3442f9","line":1123,"in_reply_to":"7aa08908_51abc0d6","updated":"2016-06-12 03:57:40.000000000","message":"Done","commit_id":"c49ea97075798b20445166def3b67ba63242243d"}]}
