)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update notification for flavor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds versoined notification for flavor update operation."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implement blueprint: flavor-notifications"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba5201f7_eeefaa84","line":9,"range":{"start_line":9,"start_character":16,"end_line":9,"end_character":25},"updated":"2017-01-06 01:27:17.000000000","message":"versioned","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Update notification for flavor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds versoined notification for flavor update operation."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implement blueprint: flavor-notifications"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba5201f7_32c2af85","line":9,"range":{"start_line":9,"start_character":16,"end_line":9,"end_character":25},"in_reply_to":"ba5201f7_eeefaa84","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"doc/notification_samples/flavor-create.json":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ae02e91a63d0833450cfa67e1c44ac01c22dd0d4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"            \"is_public\": true,"},{"line_number":16,"context_line":"            \"root_gb\": 10,"},{"line_number":17,"context_line":"            \"vcpu_weight\": 0,"},{"line_number":18,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \"event_type\": \"flavor.create\","}],"source_content_type":"application/json","patch_set":8,"id":"ba5201f7_4aabf7d6","line":18,"updated":"2017-01-09 11:44:19.000000000","message":"why are you not emitting the extra_specs ?","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c27b06ea6f254550dbbf0b26f58ef5f0411d43c7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"            \"is_public\": true,"},{"line_number":16,"context_line":"            \"root_gb\": 10,"},{"line_number":17,"context_line":"            \"vcpu_weight\": 0,"},{"line_number":18,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \"event_type\": \"flavor.create\","}],"source_content_type":"application/json","patch_set":8,"id":"ba5201f7_97542322","line":18,"in_reply_to":"ba5201f7_4aabf7d6","updated":"2017-01-09 13:01:10.000000000","message":"Extra specs doesn\u0027t exist for flavor create action[1], we have a functional test for this: https://review.openstack.org/#/c/413846/8/nova/tests/functional/notification_sample_tests/test_flavor.py L21\n\n[1]: http://developer.openstack.org/api-ref/compute/?expanded\u003d#create-flavor","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e98595eb640f561406ceec59e7379dfbccddd560","unresolved":false,"context_lines":[{"line_number":15,"context_line":"            \"is_public\": true,"},{"line_number":16,"context_line":"            \"root_gb\": 10,"},{"line_number":17,"context_line":"            \"vcpu_weight\": 0,"},{"line_number":18,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \"event_type\": \"flavor.create\","}],"source_content_type":"application/json","patch_set":8,"id":"ba5201f7_e201b907","line":18,"in_reply_to":"ba5201f7_97542322","updated":"2017-01-11 14:17:12.000000000","message":"Okay, thanks for the clarification","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"}],"doc/notification_samples/flavor-delete.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.2\","},{"line_number":6,"context_line":"        \"nova_object.name\": \"FlavorPayload\","},{"line_number":7,"context_line":"        \"nova_object.data\": {"},{"line_number":8,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":9,"context_line":"        }"},{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    \"event_type\": \"flavor.delete\","}],"source_content_type":"application/json","patch_set":7,"id":"ba5201f7_6e79fac7","line":8,"updated":"2017-01-06 01:27:17.000000000","message":"Looks like this needs to be rebased.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.2\","},{"line_number":6,"context_line":"        \"nova_object.name\": \"FlavorPayload\","},{"line_number":7,"context_line":"        \"nova_object.data\": {"},{"line_number":8,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":9,"context_line":"        }"},{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    \"event_type\": \"flavor.delete\","}],"source_content_type":"application/json","patch_set":7,"id":"ba5201f7_d2c883aa","line":8,"in_reply_to":"ba5201f7_6e79fac7","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ae02e91a63d0833450cfa67e1c44ac01c22dd0d4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"            \"is_public\": true,"},{"line_number":16,"context_line":"            \"root_gb\": 10,"},{"line_number":17,"context_line":"            \"vcpu_weight\": 0,"},{"line_number":18,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \"event_type\": \"flavor.delete\","}],"source_content_type":"application/json","patch_set":8,"id":"ba5201f7_aa80e34a","line":18,"updated":"2017-01-09 11:44:19.000000000","message":"ditto","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c27b06ea6f254550dbbf0b26f58ef5f0411d43c7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"            \"is_public\": true,"},{"line_number":16,"context_line":"            \"root_gb\": 10,"},{"line_number":17,"context_line":"            \"vcpu_weight\": 0,"},{"line_number":18,"context_line":"            \"flavorid\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\""},{"line_number":19,"context_line":"        }"},{"line_number":20,"context_line":"    },"},{"line_number":21,"context_line":"    \"event_type\": \"flavor.delete\","}],"source_content_type":"application/json","patch_set":8,"id":"ba5201f7_fa071616","line":18,"in_reply_to":"ba5201f7_aa80e34a","updated":"2017-01-09 13:01:10.000000000","message":"same comment as flavor-create.json:)","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"}],"doc/notification_samples/instance-create-end.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8774d117f671d9ff694a41f48664124fc70bcfd4","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                    \"is_public\": true,"},{"line_number":55,"context_line":"                    \"vcpu_weight\": 0"},{"line_number":56,"context_line":"                },"},{"line_number":57,"context_line":"                \"nova_object.version\": \"1.1\","},{"line_number":58,"context_line":"                \"nova_object.namespace\": \"nova\""},{"line_number":59,"context_line":"            },"},{"line_number":60,"context_line":"            \"user_id\":\"fake\","}],"source_content_type":"application/json","patch_set":3,"id":"ba5201f7_b27cbc21","line":57,"updated":"2016-12-30 22:19:59.000000000","message":"If there is a new field, why wouldn\u0027t the version on this change?","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"}],"doc/notification_samples/instance-delete-end.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    \"memory_mb\": 512,"},{"line_number":37,"context_line":"                    \"disabled\": false,"},{"line_number":38,"context_line":"                    \"rxtx_factor\": 1.0,"},{"line_number":39,"context_line":"                    \"extra_specs\": {},"},{"line_number":40,"context_line":"                    \"swap\": 0,"},{"line_number":41,"context_line":"                    \"is_public\": true,"},{"line_number":42,"context_line":"                    \"vcpu_weight\": 0"}],"source_content_type":"application/json","patch_set":7,"id":"ba5201f7_4eb99678","line":39,"updated":"2017-01-06 01:27:17.000000000","message":"I was going to ask why projects isn\u0027t in here, but gibi has already pointed out to me that the notifications don\u0027t lazy-load fields, and flavor.projects isn\u0027t set when constructed initially, it has to be lazy-loaded.\n\nI think he\u0027s working on fixing the lazy-loading issues with notifications separately.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    \"memory_mb\": 512,"},{"line_number":37,"context_line":"                    \"disabled\": false,"},{"line_number":38,"context_line":"                    \"rxtx_factor\": 1.0,"},{"line_number":39,"context_line":"                    \"extra_specs\": {},"},{"line_number":40,"context_line":"                    \"swap\": 0,"},{"line_number":41,"context_line":"                    \"is_public\": true,"},{"line_number":42,"context_line":"                    \"vcpu_weight\": 0"}],"source_content_type":"application/json","patch_set":7,"id":"ba5201f7_724fd733","line":39,"in_reply_to":"ba5201f7_4eb99678","updated":"2017-01-09 09:51:57.000000000","message":"Okay","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"nova/notifications/objects/flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8774d117f671d9ff694a41f48664124fc70bcfd4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":34,"context_line":"    # Initial Version 1.0: Initial version"},{"line_number":35,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # NOTE: if we\u0027d want to rename some fields(memory_mb-\u003eram, root_gb-\u003edisk,"},{"line_number":39,"context_line":"    # ephemeral_gb: ephemeral), bumping to payload version 2.0 will be needed."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_f276443d","line":36,"updated":"2016-12-30 22:19:59.000000000","message":"This version should be updated since you\u0027ve added new fields.","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"529fa1366dd605d05e2853e1cdd68a26dacab152","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":34,"context_line":"    # Initial Version 1.0: Initial version"},{"line_number":35,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # NOTE: if we\u0027d want to rename some fields(memory_mb-\u003eram, root_gb-\u003edisk,"},{"line_number":39,"context_line":"    # ephemeral_gb: ephemeral), bumping to payload version 2.0 will be needed."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_8594bf37","line":36,"in_reply_to":"ba5201f7_f276443d","updated":"2017-01-03 03:52:40.000000000","message":"Done","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8774d117f671d9ff694a41f48664124fc70bcfd4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        \u0027disabled\u0027: fields.BooleanField(),"},{"line_number":67,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":68,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":69,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":70,"context_line":"    }"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, flavor, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_1274a833","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":48},"updated":"2016-12-30 22:19:59.000000000","message":"Why isn\u0027t this showing up in the samples?","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"529fa1366dd605d05e2853e1cdd68a26dacab152","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        \u0027disabled\u0027: fields.BooleanField(),"},{"line_number":67,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":68,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":69,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":70,"context_line":"    }"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self, flavor, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_a599c370","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":48},"in_reply_to":"ba5201f7_1274a833","updated":"2017-01-03 03:52:40.000000000","message":"Done","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":80,"context_line":"                                                       target_version)"},{"line_number":81,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":82,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":83,"context_line":"            primitive.pop(\u0027name\u0027, None)"},{"line_number":84,"context_line":"            primitive.pop(\u0027swap\u0027, None)"},{"line_number":85,"context_line":"            primitive.pop(\u0027rxtx_factor\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_ce7ca6b7","line":82,"updated":"2017-01-06 01:27:17.000000000","message":"You have to handle popping off extra_specs and projects if the target version is \u003c (1, 2).","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":80,"context_line":"                                                       target_version)"},{"line_number":81,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":82,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":83,"context_line":"            primitive.pop(\u0027name\u0027, None)"},{"line_number":84,"context_line":"            primitive.pop(\u0027swap\u0027, None)"},{"line_number":85,"context_line":"            primitive.pop(\u0027rxtx_factor\u0027, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_b2313fa4","line":82,"in_reply_to":"ba5201f7_ce7ca6b7","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"nova/objects/flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8774d117f671d9ff694a41f48664124fc70bcfd4","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        if added_projects or deleted_projects:"},{"line_number":581,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        if added_keys or deleted_keys or added_projects or deleted_projects:"},{"line_number":584,"context_line":"            self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @staticmethod"},{"line_number":587,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_929ed854","line":584,"range":{"start_line":583,"start_character":8,"end_line":584,"end_character":69},"updated":"2016-12-30 22:19:59.000000000","message":"nit: couldn\u0027t we just send the update notification from save_projects and save_extra_specs methods right before resetting the field? It\u0027s not a big deal either way probably, this is just a rather long conditional.","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6d0ed349cc481837f005b251fd1c6f588fe898d","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        if added_projects or deleted_projects:"},{"line_number":581,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        if added_keys or deleted_keys or added_projects or deleted_projects:"},{"line_number":584,"context_line":"            self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @staticmethod"},{"line_number":587,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_aee3e2a2","line":584,"range":{"start_line":583,"start_character":8,"end_line":584,"end_character":69},"in_reply_to":"ba5201f7_05c8cf54","updated":"2017-01-06 01:12:21.000000000","message":"Yeah good point.","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"529fa1366dd605d05e2853e1cdd68a26dacab152","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        if added_projects or deleted_projects:"},{"line_number":581,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        if added_keys or deleted_keys or added_projects or deleted_projects:"},{"line_number":584,"context_line":"            self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @staticmethod"},{"line_number":587,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_05c8cf54","line":584,"range":{"start_line":583,"start_character":8,"end_line":584,"end_character":69},"in_reply_to":"ba5201f7_929ed854","updated":"2017-01-03 03:52:40.000000000","message":"if we have both keys and projects updated, then notification will be double sent","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                              reason\u003d\u0027projects modified\u0027)"},{"line_number":448,"context_line":"        self._add_access(project_id)"},{"line_number":449,"context_line":"        self._load_projects()"},{"line_number":450,"context_line":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _remove_access(self, project_id):"},{"line_number":453,"context_line":"        if self.in_api:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_296c4ccf","line":450,"updated":"2017-01-06 01:27:17.000000000","message":"We don\u0027t have a test for this.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                                              reason\u003d\u0027projects modified\u0027)"},{"line_number":448,"context_line":"        self._add_access(project_id)"},{"line_number":449,"context_line":"        self._load_projects()"},{"line_number":450,"context_line":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    def _remove_access(self, project_id):"},{"line_number":453,"context_line":"        if self.in_api:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_32238fbe","line":450,"in_reply_to":"ba5201f7_296c4ccf","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                                              reason\u003d\u0027projects modified\u0027)"},{"line_number":463,"context_line":"        self._remove_access(project_id)"},{"line_number":464,"context_line":"        self._load_projects()"},{"line_number":465,"context_line":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @staticmethod"},{"line_number":468,"context_line":"    def _flavor_create(context, updates):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_497190a7","line":465,"updated":"2017-01-06 01:27:17.000000000","message":"Or this.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                                              reason\u003d\u0027projects modified\u0027)"},{"line_number":463,"context_line":"        self._remove_access(project_id)"},{"line_number":464,"context_line":"        self._load_projects()"},{"line_number":465,"context_line":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @staticmethod"},{"line_number":468,"context_line":"    def _flavor_create(context, updates):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_522e53a5","line":465,"in_reply_to":"ba5201f7_497190a7","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"nova/tests/functional/notification_sample_tests/test_flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8774d117f671d9ff694a41f48664124fc70bcfd4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        # Create a flavor."},{"line_number":65,"context_line":"        self.admin_api.api_post(\u0027flavors\u0027, body)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        body \u003d {"},{"line_number":68,"context_line":"            \"extra_specs\": {"},{"line_number":69,"context_line":"                \"key1\": \"value1\","},{"line_number":70,"context_line":"                \"key2\": \"value2\""},{"line_number":71,"context_line":"            }"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":"        self.admin_api.api_post("},{"line_number":74,"context_line":"            \u0027flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/os-extra_specs\u0027,"},{"line_number":75,"context_line":"            body)"},{"line_number":76,"context_line":"        self._verify_notification("},{"line_number":77,"context_line":"            \u0027flavor-update\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_b2a3dc9d","line":75,"range":{"start_line":67,"start_character":8,"end_line":75,"end_character":17},"updated":"2016-12-30 22:19:59.000000000","message":"We should also have something for os-flavor-access so we get \u0027projects\u0027 in the samples.","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"529fa1366dd605d05e2853e1cdd68a26dacab152","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        # Create a flavor."},{"line_number":65,"context_line":"        self.admin_api.api_post(\u0027flavors\u0027, body)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        body \u003d {"},{"line_number":68,"context_line":"            \"extra_specs\": {"},{"line_number":69,"context_line":"                \"key1\": \"value1\","},{"line_number":70,"context_line":"                \"key2\": \"value2\""},{"line_number":71,"context_line":"            }"},{"line_number":72,"context_line":"        }"},{"line_number":73,"context_line":"        self.admin_api.api_post("},{"line_number":74,"context_line":"            \u0027flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/os-extra_specs\u0027,"},{"line_number":75,"context_line":"            body)"},{"line_number":76,"context_line":"        self._verify_notification("},{"line_number":77,"context_line":"            \u0027flavor-update\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5201f7_0811c652","line":75,"range":{"start_line":67,"start_character":8,"end_line":75,"end_character":17},"in_reply_to":"ba5201f7_b2a3dc9d","updated":"2017-01-03 03:52:40.000000000","message":"Done","commit_id":"65486c64aabeebd67ce88b996b15e38b31fe270a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                \"key2\": \"value2\""},{"line_number":72,"context_line":"            }"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"        self.admin_api.api_post("},{"line_number":75,"context_line":"            \u0027flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/os-extra_specs\u0027,"},{"line_number":76,"context_line":"            body)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        body \u003d {"},{"line_number":79,"context_line":"            \"addTenantAccess\": {"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_693c94c8","line":76,"range":{"start_line":74,"start_character":8,"end_line":76,"end_character":17},"updated":"2017-01-06 01:27:17.000000000","message":"Is it possible to verify the [1] notification but sub out the projects from the flavor-update notification? I\u0027m guessing not since it\u0027s hardcoded in the sample.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                \"key2\": \"value2\""},{"line_number":72,"context_line":"            }"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"        self.admin_api.api_post("},{"line_number":75,"context_line":"            \u0027flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/os-extra_specs\u0027,"},{"line_number":76,"context_line":"            body)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        body \u003d {"},{"line_number":79,"context_line":"            \"addTenantAccess\": {"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_f35aea29","line":76,"range":{"start_line":74,"start_character":8,"end_line":76,"end_character":17},"in_reply_to":"ba5201f7_693c94c8","updated":"2017-01-09 09:51:57.000000000","message":"No, we can\u0027t, but we could if we add a condition check if the key exists here: https://github.com/openstack/nova/blob/master/nova/tests/functional/notification_sample_tests/notification_sample_base.py#L95-L96","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"nova/tests/unit/notifications/objects/test_flavor.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4798ce844f6e020c43147fddb4cb41a00d21a1ba","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            flavor_obj.destroy()"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            flavor_obj.save()"},{"line_number":39,"context_line":"            notification \u003d mock_notification"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(notification.called)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_e975e497","line":39,"updated":"2017-01-06 01:27:17.000000000","message":"This is already set on L32 above.","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3b1913dfd17b832e00b929fcf3779551cb20b498","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            flavor_obj.destroy()"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            flavor_obj.save()"},{"line_number":39,"context_line":"            notification \u003d mock_notification"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.assertTrue(notification.called)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_32e54f08","line":39,"in_reply_to":"ba5201f7_e975e497","updated":"2017-01-09 09:51:57.000000000","message":"Done","commit_id":"8668dff8cbe248f87dcc04ebc1cd609346df4c6a"}],"releasenotes/notes/bp-flavor-notifications-7b3a56509c3f138d.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ae02e91a63d0833450cfa67e1c44ac01c22dd0d4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - flavor.projects will not present in the instance\u0027s versioned notifications"},{"line_number":7,"context_line":"    since notifications don\u0027t lazy-load fields."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba5201f7_8aba3f09","line":4,"updated":"2017-01-09 11:44:19.000000000","message":"nit : you could have created a reno file in the previous change and just modifying it by this change","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c27b06ea6f254550dbbf0b26f58ef5f0411d43c7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - flavor.projects will not present in the instance\u0027s versioned notifications"},{"line_number":7,"context_line":"    since notifications don\u0027t lazy-load fields."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba5201f7_f781efc4","line":4,"in_reply_to":"ba5201f7_8aba3f09","updated":"2017-01-09 13:01:10.000000000","message":"Done","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ae02e91a63d0833450cfa67e1c44ac01c22dd0d4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - flavor.projects will not present in the instance\u0027s versioned notifications"},{"line_number":7,"context_line":"    since notifications don\u0027t lazy-load fields."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba5201f7_2a715378","line":5,"updated":"2017-01-09 11:44:19.000000000","message":"that\u0027s technically not a bug, just a limitation. I think you could just put it in the features section.","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"c27b06ea6f254550dbbf0b26f58ef5f0411d43c7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs."},{"line_number":5,"context_line":"issues:"},{"line_number":6,"context_line":"  - flavor.projects will not present in the instance\u0027s versioned notifications"},{"line_number":7,"context_line":"    since notifications don\u0027t lazy-load fields."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"ba5201f7_d77cebed","line":5,"in_reply_to":"ba5201f7_2a715378","updated":"2017-01-09 13:01:10.000000000","message":"Done","commit_id":"89d4d1275e95ee6489ae43790055fcacaabf957d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8ff60dc245ab07268831b8115277e3cc70e1e22","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs. Flavor.projects will not present in"},{"line_number":5,"context_line":"    the instance\u0027s versioned notifications since notifications don\u0027t lazy-load"},{"line_number":6,"context_line":"    fields."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_696a0def","line":4,"range":{"start_line":4,"start_character":63,"end_line":4,"end_character":66},"updated":"2017-01-11 15:27:41.000000000","message":"nit: will not be present","commit_id":"604c9ec982465c2b94e6d947b18efe3e1eb98124"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8ff60dc245ab07268831b8115277e3cc70e1e22","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Support versioned notifications for flavor operations like create, delete,"},{"line_number":4,"context_line":"    update access and update extra_specs. Flavor.projects will not present in"},{"line_number":5,"context_line":"    the instance\u0027s versioned notifications since notifications don\u0027t lazy-load"},{"line_number":6,"context_line":"    fields."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"ba5201f7_294ba588","line":6,"updated":"2017-01-11 15:27:41.000000000","message":"We should probably refer to bug https://bugs.launchpad.net/nova/+bug/1653221 as the cause for this and so people know it\u0027s being tracked.","commit_id":"604c9ec982465c2b94e6d947b18efe3e1eb98124"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e2685dd8f9ae0628fbed943c1578556a9c07575f","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_b5f9a282","line":9,"updated":"2017-01-11 16:24:09.000000000","message":"Not just flavor.project but flavor.extra_spec is also missing.","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f5c7ee098a067e918c1d9a201984218d3e44f711","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_2a71d044","line":9,"in_reply_to":"ba5201f7_074c05c7","updated":"2017-01-11 17:04:53.000000000","message":"For the record the the bugfix for bug 1653221 [1] blows up when cherry-picked top of this patch as flavor.extra_spec is not set in the flavor while we want to emit the notification but also the extra_spec field of the flavor payload is not nullable. \n\n[1] https://review.openstack.org/#/c/415857/","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a2221bd3cef629e755b0d1d6b7503954b36f904c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_bd8a68bd","line":9,"in_reply_to":"ba5201f7_2a71d044","updated":"2017-01-11 17:15:57.000000000","message":"As discussed on IRC, let\u0027s fix the extra_spec issue in a separate patch part of the bugfix series [1]","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9b6402e1b1362f9693ac3b6859ece89701d549ef","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_67bcf1bb","line":9,"in_reply_to":"ba5201f7_35ef7288","updated":"2017-01-11 16:40:24.000000000","message":"Sorry, my mistake the instance.\u003caction\u003e notification has the extra_spec. I will check what happens with the flavor.create after the referred bugfix.","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1635072bf6afbe849a614c636d25ce067f689300","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_074c05c7","line":9,"in_reply_to":"ba5201f7_67bcf1bb","updated":"2017-01-11 16:43:46.000000000","message":"As discussed in IRC, flavor.create won\u0027t have the access or extra specs because those are not available when creating a flavor via the REST API, those are later POST actions on an existing flavor, so those would be in the update notification.","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e1014d6c1badaf640fe150d4453269fecbba979","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - |"},{"line_number":7,"context_line":"    Flavor.projects (access) will not be present in the instance versioned"},{"line_number":8,"context_line":"    notifications since notifications currently do not lazy-load fields. This"},{"line_number":9,"context_line":"    limitation is being tracked with `bug 1653221`_."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ba5201f7_35ef7288","line":9,"in_reply_to":"ba5201f7_b5f9a282","updated":"2017-01-11 16:26:41.000000000","message":"But extra_specs is not lazy-loaded, it\u0027s loaded up on first access when we get the Flavor object I thought?\n\nhttps://github.com/openstack/nova/blob/fd91a25324b7b7fed1f3f10c5b56668b20a170f4/nova/objects/flavor.py#L402","commit_id":"e05f678e0a4d314f38780cd5e3c5b4def634df25"}]}
