)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"565ee212fd5fa04c922e18f8cde2297cfdf1c9fa","unresolved":false,"context_lines":[{"line_number":10,"context_line":"notification framework."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I781975293ccef40670cf474dd1d475cb427dba63"},{"line_number":13,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bff0334d_ae76bd05","line":13,"range":{"start_line":13,"start_character":53,"end_line":13,"end_character":58},"updated":"2017-04-06 12:04:59.000000000","message":"s/ocata/pike/","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"23b69f4a7571abc0ebf6084decf8e7817cc4a000","unresolved":false,"context_lines":[{"line_number":10,"context_line":"notification framework."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I781975293ccef40670cf474dd1d475cb427dba63"},{"line_number":13,"context_line":"Implements: bp versioned-notification-transformation-ocata"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"bff0334d_8abce5dc","line":13,"range":{"start_line":13,"start_character":53,"end_line":13,"end_character":58},"in_reply_to":"bff0334d_ae76bd05","updated":"2017-04-07 03:26:49.000000000","message":"Done","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e70c050815bc2f79cc709c28f8290ac6059e1f8d","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":13,"context_line":"Change-Id: I781975293ccef40670cf474dd1d475cb427dba63"},{"line_number":14,"context_line":"Implements: bp versioned-notification-transformation-pike"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"7f287b81_f389d1c9","line":14,"range":{"start_line":14,"start_character":53,"end_line":14,"end_character":57},"updated":"2017-09-07 10:06:02.000000000","message":"this should be queens now","commit_id":"29bc60bc8fe77ed2009d85efd46d5ab420ae6b9b"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"398c78752cc11dd07a0bc5ba45918d59a5430645","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Gábor Antal \u003cantal@inf.u-szeged.hu\u003e"},{"line_number":13,"context_line":"Change-Id: I781975293ccef40670cf474dd1d475cb427dba63"},{"line_number":14,"context_line":"Implements: bp versioned-notification-transformation-pike"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"7f287b81_f3d3f836","line":14,"range":{"start_line":14,"start_character":53,"end_line":14,"end_character":57},"in_reply_to":"7f287b81_f389d1c9","updated":"2017-09-08 02:35:41.000000000","message":"Done","commit_id":"29bc60bc8fe77ed2009d85efd46d5ab420ae6b9b"}],"doc/notification_samples/instance-group-create.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f044301_12db5fed","updated":"2017-05-08 09:29:25.000000000","message":"Let\u0027s keep the naming consistent and name a file \u0027server_group-create.json\u0027","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f044301_e03d9a8f","in_reply_to":"3f044301_12db5fed","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"}],"doc/notification_samples/server_group-create.json":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"6d728c196a008c4f3f7e4ea0748f60f826837af9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"            \"user_id\": \"admin\","},{"line_number":13,"context_line":"            \"policies\": [\"anti-affinity\"],"},{"line_number":14,"context_line":"            \"members\": [],"},{"line_number":15,"context_line":"\t    \"hosts\": []"},{"line_number":16,"context_line":"        }"},{"line_number":17,"context_line":"    },"},{"line_number":18,"context_line":"    \"event_type\": \"servergroup.create\","}],"source_content_type":"application/json","patch_set":5,"id":"3f044301_392f268f","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":5},"updated":"2017-05-11 07:34:35.000000000","message":"mixed tab and space","commit_id":"3b9f1d76d0ff923f31cb9e3ba8bfe210cb61ea58"}],"nova/compute/utils.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"565ee212fd5fa04c922e18f8cde2297cfdf1c9fa","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    notifier.info(context, \u0027HostAPI.%s\u0027 % event_suffix, host_payload)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"def notify_about_server_group_action(context, group, action):"},{"line_number":466,"context_line":"    payload \u003d instg_notification.InstanceGroupPayload(group)"},{"line_number":467,"context_line":"    notification \u003d instg_notification.InstanceGroupNotification("},{"line_number":468,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_4e1971d5","line":465,"range":{"start_line":465,"start_character":4,"end_line":465,"end_character":36},"updated":"2017-04-06 12:04:59.000000000","message":"Some unit tests for this method should be added in nova/tests/unit/compute/test_compute_utils.py .","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"23b69f4a7571abc0ebf6084decf8e7817cc4a000","unresolved":false,"context_lines":[{"line_number":462,"context_line":"    notifier.info(context, \u0027HostAPI.%s\u0027 % event_suffix, host_payload)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"def notify_about_server_group_action(context, group, action):"},{"line_number":466,"context_line":"    payload \u003d instg_notification.InstanceGroupPayload(group)"},{"line_number":467,"context_line":"    notification \u003d instg_notification.InstanceGroupNotification("},{"line_number":468,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_2ae039fa","line":465,"range":{"start_line":465,"start_character":4,"end_line":465,"end_character":36},"in_reply_to":"bff0334d_4e1971d5","updated":"2017-04-07 03:26:49.000000000","message":"Done","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":470,"context_line":"            context\u003dcontext, host\u003dCONF.host, binary\u003d\u0027nova-api\u0027),"},{"line_number":471,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":472,"context_line":"            object\u003d\u0027servergroup\u0027,"},{"line_number":473,"context_line":"            action\u003daction),"},{"line_number":474,"context_line":"        payload\u003dpayload)"},{"line_number":475,"context_line":"    notification.emit(context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_526d6702","line":472,"range":{"start_line":472,"start_character":20,"end_line":472,"end_character":31},"updated":"2017-05-08 09:29:25.000000000","message":"let\u0027s have consistent naming. I suggest \u0027server_group\u0027","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":470,"context_line":"            context\u003dcontext, host\u003dCONF.host, binary\u003d\u0027nova-api\u0027),"},{"line_number":471,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":472,"context_line":"            object\u003d\u0027servergroup\u0027,"},{"line_number":473,"context_line":"            action\u003daction),"},{"line_number":474,"context_line":"        payload\u003dpayload)"},{"line_number":475,"context_line":"    notification.emit(context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_20ba6209","line":472,"range":{"start_line":472,"start_character":20,"end_line":472,"end_character":31},"in_reply_to":"3f044301_526d6702","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"6d728c196a008c4f3f7e4ea0748f60f826837af9","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"def notify_about_host_update(context, event_suffix, host_payload):"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    \"\"\"Send a notification about host update."},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"    :param event_suffix: Event type like \"create.start\" or \"create.end\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_99487a5c","line":477,"updated":"2017-05-11 07:34:35.000000000","message":"reason for this newline?","commit_id":"3b9f1d76d0ff923f31cb9e3ba8bfe210cb61ea58"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"f925c5a7c911c06f23f9f48f9ae0689eef5adeb3","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    notification \u003d sg_notification.ServerGroupNotification("},{"line_number":496,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"},{"line_number":497,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":498,"context_line":"            context\u003dcontext, host\u003dCONF.host, binary\u003d\u0027nova-api\u0027),"},{"line_number":499,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":500,"context_line":"            object\u003d\u0027server_group\u0027,"},{"line_number":501,"context_line":"            action\u003daction),"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_6fc4b85f","line":498,"range":{"start_line":498,"start_character":12,"end_line":498,"end_character":27},"updated":"2017-06-15 08:30:04.000000000","message":"I think it should not be there.","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"9944f90789a501ae9802589421613e01b3b3a87b","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    notification \u003d sg_notification.ServerGroupNotification("},{"line_number":496,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"},{"line_number":497,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":498,"context_line":"            context\u003dcontext, host\u003dCONF.host, binary\u003d\u0027nova-api\u0027),"},{"line_number":499,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":500,"context_line":"            object\u003d\u0027server_group\u0027,"},{"line_number":501,"context_line":"            action\u003daction),"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_5f1072a8","line":498,"range":{"start_line":498,"start_character":12,"end_line":498,"end_character":27},"in_reply_to":"7f231b9d_6fc4b85f","updated":"2017-06-16 01:42:48.000000000","message":"Done","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"f925c5a7c911c06f23f9f48f9ae0689eef5adeb3","unresolved":false,"context_lines":[{"line_number":503,"context_line":"    notification.emit(context)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"def get_nw_info_for_instance(instance):"},{"line_number":507,"context_line":"    if instance.info_cache is None:"},{"line_number":508,"context_line":"        return network_model.NetworkInfo.hydrate([])"},{"line_number":509,"context_line":"    return instance.info_cache.network_info"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"def refresh_info_cache_for_instance(context, instance):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_8fc39438","line":509,"range":{"start_line":506,"start_character":0,"end_line":509,"end_character":43},"updated":"2017-06-15 08:30:04.000000000","message":"I think this method also was removed in [1].\n\n[1]: https://review.openstack.org/#/c/451387/","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"9944f90789a501ae9802589421613e01b3b3a87b","unresolved":false,"context_lines":[{"line_number":503,"context_line":"    notification.emit(context)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"def get_nw_info_for_instance(instance):"},{"line_number":507,"context_line":"    if instance.info_cache is None:"},{"line_number":508,"context_line":"        return network_model.NetworkInfo.hydrate([])"},{"line_number":509,"context_line":"    return instance.info_cache.network_info"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"def refresh_info_cache_for_instance(context, instance):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_3f2936e5","line":509,"range":{"start_line":506,"start_character":0,"end_line":509,"end_character":43},"in_reply_to":"7f231b9d_8fc39438","updated":"2017-06-16 01:42:48.000000000","message":"Done. Sorry for rebased too fast and didn\u0027t see these comments.","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e70c050815bc2f79cc709c28f8290ac6059e1f8d","unresolved":false,"context_lines":[{"line_number":563,"context_line":"    notification \u003d sg_notification.ServerGroupNotification("},{"line_number":564,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"},{"line_number":565,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":566,"context_line":"            host\u003dCONF.host, source\u003d\u0027nova-api\u0027),"},{"line_number":567,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":568,"context_line":"            object\u003d\u0027server_group\u0027,"},{"line_number":569,"context_line":"            action\u003daction),"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_b3a8e91f","line":566,"range":{"start_line":566,"start_character":35,"end_line":566,"end_character":45},"updated":"2017-09-07 10:06:02.000000000","message":"nit: use the enum value fields.NotificationSource.API instead","commit_id":"29bc60bc8fe77ed2009d85efd46d5ab420ae6b9b"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"398c78752cc11dd07a0bc5ba45918d59a5430645","unresolved":false,"context_lines":[{"line_number":563,"context_line":"    notification \u003d sg_notification.ServerGroupNotification("},{"line_number":564,"context_line":"        priority\u003dfields.NotificationPriority.INFO,"},{"line_number":565,"context_line":"        publisher\u003dnotification_base.NotificationPublisher("},{"line_number":566,"context_line":"            host\u003dCONF.host, source\u003d\u0027nova-api\u0027),"},{"line_number":567,"context_line":"        event_type\u003dnotification_base.EventType("},{"line_number":568,"context_line":"            object\u003d\u0027server_group\u0027,"},{"line_number":569,"context_line":"            action\u003daction),"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_d3d8fc53","line":566,"range":{"start_line":566,"start_character":35,"end_line":566,"end_character":45},"in_reply_to":"7f287b81_b3a8e91f","updated":"2017-09-08 02:35:41.000000000","message":"Done","commit_id":"29bc60bc8fe77ed2009d85efd46d5ab420ae6b9b"}],"nova/notifications/objects/instance_group.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f044301_b2df0bd5","updated":"2017-05-08 09:29:25.000000000","message":"let\u0027s keep the naming consistent and call this file server_group.py","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3f044301_40e44e3c","in_reply_to":"3f044301_b2df0bd5","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":19,"context_line":"class InstanceGroupPayload(base.NotificationPayloadBase):"},{"line_number":20,"context_line":"    SCHEMA \u003d {"},{"line_number":21,"context_line":"        \u0027id\u0027: (\u0027group\u0027, \u0027id\u0027),"},{"line_number":22,"context_line":"        \u0027uuid\u0027: (\u0027group\u0027, \u0027uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_72f3c374","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":26},"updated":"2017-05-08 09:29:25.000000000","message":"I suggest to name this as well ServerGroupPayload","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":19,"context_line":"class InstanceGroupPayload(base.NotificationPayloadBase):"},{"line_number":20,"context_line":"    SCHEMA \u003d {"},{"line_number":21,"context_line":"        \u0027id\u0027: (\u0027group\u0027, \u0027id\u0027),"},{"line_number":22,"context_line":"        \u0027uuid\u0027: (\u0027group\u0027, \u0027uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_20e1422b","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":26},"in_reply_to":"3f044301_72f3c374","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # Version 1.0: Initial version"},{"line_number":30,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":33,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_32b9bbe8","line":32,"updated":"2017-05-08 09:29:25.000000000","message":"Nova API does not return the DB id just the uuid of the group so we don\u0027t need that here either.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # Version 1.0: Initial version"},{"line_number":30,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":33,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_c0c97eac","line":32,"in_reply_to":"3f044301_32b9bbe8","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027policies\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_12d11ffc","line":38,"updated":"2017-05-08 09:29:25.000000000","message":"There is also a lazy-loaded \u0027hosts\u0027 field in the InstanceGroup object. I suggest to include that in the nottificaiton as a nullable field and make sure that the InstanceGroup is orphaned (_context is set to None) before we pass it to schema population. This way if the hosts field are already loaded during an update then the notification can contain that information but if not then the notification will not trigger the db load.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"9bd3320a4aa37d424c4bb03174a53234d889b69d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027policies\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_c8c4f293","line":38,"in_reply_to":"3f044301_023e438b","updated":"2017-05-11 02:33:13.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027policies\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_80cdb667","line":38,"in_reply_to":"3f044301_12d11ffc","updated":"2017-05-10 09:05:22.000000000","message":"I add the hosts field. Could you kindly tell how to orphan the ServerGroup? Set _context to which object or method?\nThanks.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3bdc66cb42a0bd9cabdc069ccff468ee5a18cd0e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027policies\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_023e438b","line":38,"in_reply_to":"3f044301_80cdb667","updated":"2017-05-10 14:10:15.000000000","message":"In the __init__(), before the populate_schema() add:\n# Note: The group is orphaned here to avoid triggering lazy-loading of the group.hosts field.\ngroup._context \u003d None","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"},{"line_number":42,"context_line":"        super(InstanceGroupPayload, self).__init__(**kwargs)"},{"line_number":43,"context_line":"        self.populate_schema(group\u003dgroup)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_72098393","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":60},"updated":"2017-05-08 09:29:25.000000000","message":"**kwargs is not used, you can remove it.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027members\u0027: fields.ListOfStringsField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, group, **kwargs):"},{"line_number":42,"context_line":"        super(InstanceGroupPayload, self).__init__(**kwargs)"},{"line_number":43,"context_line":"        self.populate_schema(group\u003dgroup)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_a0ce72b1","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":60},"in_reply_to":"3f044301_72098393","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.populate_schema(group\u003dgroup)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@base.notification_sample(\u0027instance-group-create.json\u0027)"},{"line_number":47,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":48,"context_line":"class InstanceGroupNotification(base.NotificationBase):"},{"line_number":49,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_12047f49","line":46,"range":{"start_line":46,"start_character":27,"end_line":46,"end_character":42},"updated":"2017-05-08 09:29:25.000000000","message":"I suggest server_group-create.json","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.populate_schema(group\u003dgroup)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@base.notification_sample(\u0027instance-group-create.json\u0027)"},{"line_number":47,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":48,"context_line":"class InstanceGroupNotification(base.NotificationBase):"},{"line_number":49,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_80c7f696","line":46,"range":{"start_line":46,"start_character":27,"end_line":46,"end_character":42},"in_reply_to":"3f044301_12047f49","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@base.notification_sample(\u0027instance-group-create.json\u0027)"},{"line_number":47,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":48,"context_line":"class InstanceGroupNotification(base.NotificationBase):"},{"line_number":49,"context_line":"    # Version 1.0: Initial version"},{"line_number":50,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_b28dcbd4","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":31},"updated":"2017-05-08 09:29:25.000000000","message":"ServerGroupNotification","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@base.notification_sample(\u0027instance-group-create.json\u0027)"},{"line_number":47,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":48,"context_line":"class InstanceGroupNotification(base.NotificationBase):"},{"line_number":49,"context_line":"    # Version 1.0: Initial version"},{"line_number":50,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_60c4ea91","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":31},"in_reply_to":"3f044301_b28dcbd4","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"}],"nova/tests/functional/notification_sample_tests/test_server_group.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"565ee212fd5fa04c922e18f8cde2297cfdf1c9fa","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self._verify_notification("},{"line_number":28,"context_line":"            \u0027instance-group-create\u0027,"},{"line_number":29,"context_line":"            replacements\u003d{"},{"line_number":30,"context_line":"                \u0027uuid\u0027: self.ANY},"},{"line_number":31,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_6e2e7544","line":30,"range":{"start_line":30,"start_character":24,"end_line":30,"end_character":32},"updated":"2017-04-06 12:04:59.000000000","message":"The server group uuid can be got in line 24.\nIt should be used.","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"23b69f4a7571abc0ebf6084decf8e7817cc4a000","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self._verify_notification("},{"line_number":28,"context_line":"            \u0027instance-group-create\u0027,"},{"line_number":29,"context_line":"            replacements\u003d{"},{"line_number":30,"context_line":"                \u0027uuid\u0027: self.ANY},"},{"line_number":31,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_caf0adcc","line":30,"range":{"start_line":30,"start_character":24,"end_line":30,"end_character":32},"in_reply_to":"bff0334d_6e2e7544","updated":"2017-04-07 03:26:49.000000000","message":"Done","commit_id":"6685f78a1193df69758f4a912d964efa6ba10513"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from nova.tests.unit import fake_notifier"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class TestInstanceGroupNotificationSample("},{"line_number":18,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def test_instance_gropu_create(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_5800e901","line":17,"range":{"start_line":17,"start_character":6,"end_line":17,"end_character":41},"updated":"2017-05-08 09:29:25.000000000","message":"TestServerGroupNotificationSample","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from nova.tests.unit import fake_notifier"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class TestInstanceGroupNotificationSample("},{"line_number":18,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def test_instance_gropu_create(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_8075b666","line":17,"range":{"start_line":17,"start_character":6,"end_line":17,"end_character":41},"in_reply_to":"3f044301_5800e901","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"class TestInstanceGroupNotificationSample("},{"line_number":18,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def test_instance_gropu_create(self):"},{"line_number":21,"context_line":"        group_req \u003d {"},{"line_number":22,"context_line":"                \"name\": \"test-server-group\","},{"line_number":23,"context_line":"                \"policies\": [\"anti-affinity\"]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_78184574","line":20,"range":{"start_line":20,"start_character":8,"end_line":20,"end_character":34},"updated":"2017-05-08 09:29:25.000000000","message":"test_server_group_create","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"class TestInstanceGroupNotificationSample("},{"line_number":18,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def test_instance_gropu_create(self):"},{"line_number":21,"context_line":"        group_req \u003d {"},{"line_number":22,"context_line":"                \"name\": \"test-server-group\","},{"line_number":23,"context_line":"                \"policies\": [\"anti-affinity\"]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_6072aa7d","line":20,"range":{"start_line":20,"start_character":8,"end_line":20,"end_character":34},"in_reply_to":"3f044301_78184574","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        group_req \u003d {"},{"line_number":22,"context_line":"                \"name\": \"test-server-group\","},{"line_number":23,"context_line":"                \"policies\": [\"anti-affinity\"]}"},{"line_number":24,"context_line":"        group \u003d self.admin_api.post_server_groups(group_req)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":27,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_92c76f13","line":24,"range":{"start_line":24,"start_character":21,"end_line":24,"end_character":30},"updated":"2017-05-08 09:29:25.000000000","message":"I think creating a server group is not an admin only operation by default, so this should work with the self.api as well.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        group_req \u003d {"},{"line_number":22,"context_line":"                \"name\": \"test-server-group\","},{"line_number":23,"context_line":"                \"policies\": [\"anti-affinity\"]}"},{"line_number":24,"context_line":"        group \u003d self.admin_api.post_server_groups(group_req)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":27,"context_line":"        self._verify_notification("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_406b2e84","line":24,"range":{"start_line":24,"start_character":21,"end_line":24,"end_character":30},"in_reply_to":"3f044301_92c76f13","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"6d728c196a008c4f3f7e4ea0748f60f826837af9","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    def test_server_group_create(self):"},{"line_number":21,"context_line":"        group_req \u003d {"},{"line_number":22,"context_line":"                \"name\": \"test-server-group\","},{"line_number":23,"context_line":"                \"policies\": [\"anti-affinity\"]}"},{"line_number":24,"context_line":"        group \u003d self.api.post_server_groups(group_req)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_d96ba2b4","line":22,"range":{"start_line":22,"start_character":8,"end_line":22,"end_character":16},"updated":"2017-05-11 07:34:35.000000000","message":"too much indentations","commit_id":"3b9f1d76d0ff923f31cb9e3ba8bfe210cb61ea58"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"6d728c196a008c4f3f7e4ea0748f60f826837af9","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":27,"context_line":"        self._verify_notification("},{"line_number":28,"context_line":"            \u0027instance-group-create\u0027,"},{"line_number":29,"context_line":"            replacements\u003d{"},{"line_number":30,"context_line":"                \u0027uuid\u0027: group[\u0027id\u0027]},"},{"line_number":31,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_795ece12","line":30,"range":{"start_line":29,"start_character":26,"end_line":30,"end_character":16},"updated":"2017-05-11 07:34:35.000000000","message":"newline?","commit_id":"3b9f1d76d0ff923f31cb9e3ba8bfe210cb61ea58"}],"nova/tests/unit/compute/test_compute_utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7252f793c018c4cd1beaf0d4a3168ad57b6466c2","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":881,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":882,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":883,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":884,"context_line":""},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_783165ec","line":883,"range":{"start_line":882,"start_character":0,"end_line":883,"end_character":53},"updated":"2017-05-08 09:29:25.000000000","message":"you could assert project_id and user_id and the uuid as well.","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"5fda45f693a07f4c35a9c5281a4185a25441cccb","unresolved":false,"context_lines":[{"line_number":879,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":881,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":882,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":883,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":884,"context_line":""},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_c025fe5d","line":883,"range":{"start_line":882,"start_character":0,"end_line":883,"end_character":53},"in_reply_to":"3f044301_783165ec","updated":"2017-05-10 09:05:22.000000000","message":"Done","commit_id":"a01a384218fa56aa79d3fa8674ad3449b1b74fcf"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"09e41ed11c06633f7cbd1307eb2a5cfcd8a0f050","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_3563e044","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"updated":"2017-05-21 21:13:54.000000000","message":"Isn\u0027t it the same test as functional test (which is also compared to the json file)? Or am I miss something?","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"bbc949724099fd49940728feb10ed8a7b5126664","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_fbf31972","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"in_reply_to":"ff0f0b1f_2064bc21","updated":"2017-05-22 01:51:03.000000000","message":"I also thinks this might be a duplication, and if you are going to test this, could you just assert notifcation[\u0027payload\u0027] to a dict? there are so many asserEqual here.","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3ca6857868f3d02d31b60f8ec42b9d48251dad81","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_46bb480d","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"in_reply_to":"ff0f0b1f_267734a3","updated":"2017-05-22 02:25:34.000000000","message":"https://review.openstack.org/#/c/454023/11/nova/tests/functional/notification_sample_tests/test_server_group.py@27 here compared notification result with the json file you added.","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"7a09dde87544f16fcca1600bdd6f822ce99c4ede","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_2064bc21","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"in_reply_to":"ff0f0b1f_3563e044","updated":"2017-05-22 00:33:23.000000000","message":"@Gabor, Hi Gabor, no, you do not miss anything. But I think this function is the unit test for \u0027notify_about_server_group_action\u0027 which i add, but the functional test is test about server group notification function, I do not think there is any duplication.\n\nI\u0027m not so sure if there is any other consensus about this comment, could you recheck this patch? Thanks.","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"ebfebf6edd5de4fd1d4297923ad8885bdbf39c79","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_06e1d0d0","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"in_reply_to":"ff0f0b1f_46bb480d","updated":"2017-05-22 02:45:13.000000000","message":"@zhenyu zheng, Ah, you are right, it test the notification body.\n\nI still think it\u0027s a nit comments, you can refer the upper unit test in this file, there are unit tests for notification payload.\nSo unit test is unit test, functional test is functional test, what do you think?","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"6a8dae898c0e22f608baf8b7343c42379df4f680","unresolved":false,"context_lines":[{"line_number":863,"context_line":"        self.project_id \u003d \u0027fake\u0027"},{"line_number":864,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":865,"context_line":""},{"line_number":866,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":867,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":868,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":869,"context_line":"                                      id \u003d1,"},{"line_number":870,"context_line":"                                      uuid\u003duuid,"},{"line_number":871,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":872,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":873,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":874,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":875,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":876,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":877,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":878,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":879,"context_line":"        self.assertEqual(notification[\u0027priority\u0027], \u0027INFO\u0027)"},{"line_number":880,"context_line":"        self.assertEqual(notification[\u0027event_type\u0027], \u0027server_group.create\u0027)"},{"line_number":881,"context_line":"        self.assertEqual(notification[\u0027publisher_id\u0027],"},{"line_number":882,"context_line":"                         \u0027nova-api:fake-mini\u0027)"},{"line_number":883,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027name\u0027],"},{"line_number":884,"context_line":"                         \u0027test-server-group\u0027)"},{"line_number":885,"context_line":"        policies \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027policies\u0027]"},{"line_number":886,"context_line":"        self.assertEqual(policies, [\u0027anti-affinity\u0027])"},{"line_number":887,"context_line":"        project_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027project_id\u0027]"},{"line_number":888,"context_line":"        self.assertEqual(project_id, \u0027fake\u0027)"},{"line_number":889,"context_line":"        user_id \u003d notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027user_id\u0027]"},{"line_number":890,"context_line":"        self.assertEqual(user_id, \u0027fake\u0027)"},{"line_number":891,"context_line":"        self.assertEqual(notification[\u0027payload\u0027][\u0027nova_object.data\u0027][\u0027uuid\u0027],"},{"line_number":892,"context_line":"                         \u0027788608ec-ebdc-45c5-bc7f-e5f24ab92c80\u0027)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":""},{"line_number":895,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff0f0b1f_267734a3","line":892,"range":{"start_line":866,"start_character":0,"end_line":892,"end_character":64},"in_reply_to":"ff0f0b1f_fbf31972","updated":"2017-05-22 02:13:55.000000000","message":"@Gabor, @Zhenyu Zheng, Sorry for did not check the functional test before reply your comments. After I checked the functional test, I could not found which functional test compared the notification group json, Could you tell me which one test the detailed notification  body in functional test?\n\nI still think unit test is unit test and functional test is functional test. Not definitely \u0027notify_about_server_group_action\u0027 function called which will fit the fit the functional case(if it exist), so functional should check the detailed notification json even it checked in functional case.","commit_id":"d5ad63fbbfd4310953f2c5f4e5a1e57d7841d0ae"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"f925c5a7c911c06f23f9f48f9ae0689eef5adeb3","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":857,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":858,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":859,"context_line":"                                      id \u003d1,"},{"line_number":860,"context_line":"                                      uuid\u003duuid,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_ef37a84c","line":857,"range":{"start_line":857,"start_character":8,"end_line":857,"end_character":53},"updated":"2017-06-15 08:30:04.000000000","message":"Just a question: Isn\u0027t it more elegant to use uuid generating like in L786?","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"9944f90789a501ae9802589421613e01b3b3a87b","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        self.context \u003d context.RequestContext(self.user_id, self.project_id)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":857,"context_line":"        uuid \u003d \"788608ec-ebdc-45c5-bc7f-e5f24ab92c80\""},{"line_number":858,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":859,"context_line":"                                      id \u003d1,"},{"line_number":860,"context_line":"                                      uuid\u003duuid,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_bf15469e","line":857,"range":{"start_line":857,"start_character":8,"end_line":857,"end_character":53},"in_reply_to":"7f231b9d_ef37a84c","updated":"2017-06-16 01:42:48.000000000","message":"Done","commit_id":"1655375f85a57c8ba6382c051806db91a48f4649"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"d2a6d5ff7a39967d01062462513735a871238b2e","unresolved":false,"context_lines":[{"line_number":941,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":942,"context_line":"        uuid \u003d uuids.instance"},{"line_number":943,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":944,"context_line":"                                      id \u003d1,"},{"line_number":945,"context_line":"                                      uuid\u003duuid,"},{"line_number":946,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":947,"context_line":"                                      project_id\u003dself.project_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_4d35f3f6","line":944,"range":{"start_line":944,"start_character":40,"end_line":944,"end_character":41},"updated":"2017-07-10 13:48:36.000000000","message":"extra space here","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"3e6f381527901392b62501426ab16870169c50f7","unresolved":false,"context_lines":[{"line_number":941,"context_line":"    def test_notify_about_server_group_action(self):"},{"line_number":942,"context_line":"        uuid \u003d uuids.instance"},{"line_number":943,"context_line":"        group \u003d objects.InstanceGroup(context\u003dself.context,"},{"line_number":944,"context_line":"                                      id \u003d1,"},{"line_number":945,"context_line":"                                      uuid\u003duuid,"},{"line_number":946,"context_line":"                                      user_id\u003dself.user_id,"},{"line_number":947,"context_line":"                                      project_id\u003dself.project_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_6b2ac52c","line":944,"range":{"start_line":944,"start_character":40,"end_line":944,"end_character":41},"in_reply_to":"3f1d235d_4d35f3f6","updated":"2017-07-11 01:41:44.000000000","message":"Done","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"d2a6d5ff7a39967d01062462513735a871238b2e","unresolved":false,"context_lines":[{"line_number":947,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":948,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":949,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":950,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":951,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":952,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":953,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":954,"context_line":"        expected \u003d {\u0027priority\u0027: \u0027INFO\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_907c3eb6","line":951,"range":{"start_line":950,"start_character":8,"end_line":951,"end_character":71},"updated":"2017-07-10 13:48:36.000000000","message":"I think this should not be called directly as creating a server group should \"trigger\" this event. Or am I miss something?","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"3e6f381527901392b62501426ab16870169c50f7","unresolved":false,"context_lines":[{"line_number":947,"context_line":"                                      project_id\u003dself.project_id,"},{"line_number":948,"context_line":"                                      name\u003d\"test-server-group\","},{"line_number":949,"context_line":"                                      policies\u003d[\"anti-affinity\"])"},{"line_number":950,"context_line":"        compute_utils.notify_about_server_group_action(self.context,"},{"line_number":951,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":952,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":953,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":954,"context_line":"        expected \u003d {\u0027priority\u0027: \u0027INFO\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_aba33db1","line":951,"range":{"start_line":950,"start_character":8,"end_line":951,"end_character":71},"in_reply_to":"3f1d235d_907c3eb6","updated":"2017-07-11 01:41:44.000000000","message":"Hi, Gabor Antal, as you say this is unit test, no one called the server group create method, so there is no way to trigger this event in this test case. For unit test of \u0027notify_about_server_group_action\u0027, we need to call here explicitly.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"d2a6d5ff7a39967d01062462513735a871238b2e","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":952,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":953,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":954,"context_line":"        expected \u003d {\u0027priority\u0027: \u0027INFO\u0027,"},{"line_number":955,"context_line":"                    \u0027event_type\u0027: u\u0027server_group.create\u0027,"},{"line_number":956,"context_line":"                    \u0027publisher_id\u0027: u\u0027nova-api:fake-mini\u0027,"},{"line_number":957,"context_line":"                    \u0027payload\u0027: {"},{"line_number":958,"context_line":"                        \u0027nova_object.data\u0027: {"},{"line_number":959,"context_line":"                            \u0027name\u0027: u\u0027test-server-group\u0027,"},{"line_number":960,"context_line":"                            \u0027policies\u0027: [u\u0027anti-affinity\u0027],"},{"line_number":961,"context_line":"                            \u0027project_id\u0027: u\u0027fake\u0027,"},{"line_number":962,"context_line":"                            \u0027user_id\u0027: u\u0027fake\u0027,"},{"line_number":963,"context_line":"                            \u0027uuid\u0027: uuid,"},{"line_number":964,"context_line":"                            \u0027hosts\u0027: None,"},{"line_number":965,"context_line":"                            \u0027members\u0027: None"},{"line_number":966,"context_line":"                        },"},{"line_number":967,"context_line":"                        \u0027nova_object.name\u0027: \u0027ServerGroupPayload\u0027,"},{"line_number":968,"context_line":"                        \u0027nova_object.namespace\u0027: \u0027nova\u0027,"},{"line_number":969,"context_line":"                        \u0027nova_object.version\u0027: \u00271.0\u0027"},{"line_number":970,"context_line":"                   }"},{"line_number":971,"context_line":"            }"},{"line_number":972,"context_line":"        self.assertEqual(notification, expected)"},{"line_number":973,"context_line":""},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_9346884f","line":972,"range":{"start_line":954,"start_character":8,"end_line":972,"end_character":48},"updated":"2017-07-10 13:48:36.000000000","message":"It is rather a functional test. Unit test should not test if the correct notification is sent, that is tested in functional tests. Unit tests should test whether the method was called with the correct parameters, I think.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"3e6f381527901392b62501426ab16870169c50f7","unresolved":false,"context_lines":[{"line_number":951,"context_line":"                                                       group, \u0027create\u0027)"},{"line_number":952,"context_line":"        self.assertEqual(len(fake_notifier.VERSIONED_NOTIFICATIONS), 1)"},{"line_number":953,"context_line":"        notification \u003d fake_notifier.VERSIONED_NOTIFICATIONS[0]"},{"line_number":954,"context_line":"        expected \u003d {\u0027priority\u0027: \u0027INFO\u0027,"},{"line_number":955,"context_line":"                    \u0027event_type\u0027: u\u0027server_group.create\u0027,"},{"line_number":956,"context_line":"                    \u0027publisher_id\u0027: u\u0027nova-api:fake-mini\u0027,"},{"line_number":957,"context_line":"                    \u0027payload\u0027: {"},{"line_number":958,"context_line":"                        \u0027nova_object.data\u0027: {"},{"line_number":959,"context_line":"                            \u0027name\u0027: u\u0027test-server-group\u0027,"},{"line_number":960,"context_line":"                            \u0027policies\u0027: [u\u0027anti-affinity\u0027],"},{"line_number":961,"context_line":"                            \u0027project_id\u0027: u\u0027fake\u0027,"},{"line_number":962,"context_line":"                            \u0027user_id\u0027: u\u0027fake\u0027,"},{"line_number":963,"context_line":"                            \u0027uuid\u0027: uuid,"},{"line_number":964,"context_line":"                            \u0027hosts\u0027: None,"},{"line_number":965,"context_line":"                            \u0027members\u0027: None"},{"line_number":966,"context_line":"                        },"},{"line_number":967,"context_line":"                        \u0027nova_object.name\u0027: \u0027ServerGroupPayload\u0027,"},{"line_number":968,"context_line":"                        \u0027nova_object.namespace\u0027: \u0027nova\u0027,"},{"line_number":969,"context_line":"                        \u0027nova_object.version\u0027: \u00271.0\u0027"},{"line_number":970,"context_line":"                   }"},{"line_number":971,"context_line":"            }"},{"line_number":972,"context_line":"        self.assertEqual(notification, expected)"},{"line_number":973,"context_line":""},{"line_number":974,"context_line":""},{"line_number":975,"context_line":"class ComputeUtilsQuotaDeltaTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_ab91fd48","line":972,"range":{"start_line":954,"start_character":8,"end_line":972,"end_character":48},"in_reply_to":"3f1d235d_9346884f","updated":"2017-07-11 01:41:44.000000000","message":"Refer to the comments above, i think this not needed, but other comments insist to add this. If you have a strong opinion on remove the test, i can remove it.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"6d728c196a008c4f3f7e4ea0748f60f826837af9","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        self.assertFalse(mock_emit.called)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"notification_object_data \u003d {"},{"line_number":350,"context_line":"    \u0027ServerGroupNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":351,"context_line":"    \u0027ServerGroupPayload\u0027: \u00271.0-eb4bd1738b4670cfe1b7c30344c143c3\u0027,"},{"line_number":352,"context_line":"    \u0027AggregateNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":353,"context_line":"    \u0027AggregatePayload\u0027: \u00271.1-1eb9adcc4440d8627de6ec37c6398746\u0027,"},{"line_number":354,"context_line":"    \u0027AuditPeriodPayload\u0027: \u00271.0-2b429dd307b8374636703b843fa3f9cb\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_99b63a3e","line":351,"range":{"start_line":350,"start_character":0,"end_line":351,"end_character":65},"updated":"2017-05-11 07:34:35.000000000","message":"please make it alphabetical","commit_id":"3b9f1d76d0ff923f31cb9e3ba8bfe210cb61ea58"}],"nova/tests/unit/objects/test_instance_group.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"db8aa89e1bedb0a3308d9bd5d8cc4b62796d547e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027server_group_id\u0027: _DB_UUID})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.assertRaises(exception.ObjectActionError, obj.create)"},{"line_number":170,"context_line":"        mock_notify_action.assert_called()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_server_group_update\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup._destroy_in_db\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_ff8d8c2a","line":170,"updated":"2017-07-10 07:56:35.000000000","message":"You can assert here the parameters (contex, group, action) of the call as well here.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"3e6f381527901392b62501426ab16870169c50f7","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027server_group_id\u0027: _DB_UUID})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.assertRaises(exception.ObjectActionError, obj.create)"},{"line_number":170,"context_line":"        mock_notify_action.assert_called()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_server_group_update\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup._destroy_in_db\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_6b43e514","line":170,"in_reply_to":"3f1d235d_5390f795","updated":"2017-07-11 01:41:44.000000000","message":"Thanks Gibizer for the help. \n\nStill not work in my environment, even i reinstalled the requirements.txt and test-requirments.txt. Submit a new patch to see if it can pass the community CI.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"89a8a9346bc3fad0c4e8175ba9b00fae51c792fb","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027server_group_id\u0027: _DB_UUID})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.assertRaises(exception.ObjectActionError, obj.create)"},{"line_number":170,"context_line":"        mock_notify_action.assert_called()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_server_group_update\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup._destroy_in_db\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_5390f795","line":170,"in_reply_to":"3f1d235d_980c6e3c","updated":"2017-07-10 09:57:31.000000000","message":"This change works for me:\ndiff --git a/nova/tests/unit/objects/test_instance_group.py b/nova/tests/unit/objects/test_instance_group.py\nindex b17787b829..09c764e275 100644\n--- a/nova/tests/unit/objects/test_instance_group.py\n+++ b/nova/tests/unit/objects/test_instance_group.py\n@@ -167,7 +167,8 @@ class _TestInstanceGroupObject(object):\n              \u0027server_group_id\u0027: _DB_UUID})\n \n         self.assertRaises(exception.ObjectActionError, obj.create)\n-        mock_notify_action.assert_called()\n+        mock_notify_action.assert_called_once_with(\n+            context\u003dobj._context, group\u003dobj, action\u003d\u0027create\u0027)\n \n     @mock.patch(\u0027nova.compute.utils.notify_about_server_group_update\u0027)\n     @mock.patch(\u0027nova.objects.InstanceGroup._destroy_in_db\u0027)","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"},{"author":{"_account_id":8264,"name":"Shunli Zhou","username":"ShunliZhou"},"change_message_id":"03ec8d853774060a860ece464febf7ebfe2fa26b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"             \u0027server_group_id\u0027: _DB_UUID})"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.assertRaises(exception.ObjectActionError, obj.create)"},{"line_number":170,"context_line":"        mock_notify_action.assert_called()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_server_group_update\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup._destroy_in_db\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_980c6e3c","line":170,"in_reply_to":"3f1d235d_ff8d8c2a","updated":"2017-07-10 09:23:51.000000000","message":"OK. there is some problem to assert the parameter, mock always complain that expected !\u003d actual even i assert with parameter (self._context, obj, \u0027create\u0027). \n\nI will try to fix this.","commit_id":"6c1150baeeb962c562358f200374dde449405ec0"}]}
