)]}'
{"doc/ext/versioned_notifications.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3297c540178f19fc81edf87138879b006afa6901","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from docutils import nodes"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.notifications.objects import base as notification"},{"line_number":27,"context_line":"# Import flavor notification object to make sure the versioned notifications"},{"line_number":28,"context_line":"# list is generated correctly."},{"line_number":29,"context_line":"from nova.notifications.objects import flavor"},{"line_number":30,"context_line":"from nova.objects import base"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_71e86117","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":30},"updated":"2016-12-08 12:10:45.000000000","message":"Please rebase your patch. On master we already have a similar comment in this file so your comment is not needed.","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"5fce21b63c03e93704a3192e45a5d3e59720d582","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from docutils import nodes"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.notifications.objects import base as notification"},{"line_number":27,"context_line":"# Import flavor notification object to make sure the versioned notifications"},{"line_number":28,"context_line":"# list is generated correctly."},{"line_number":29,"context_line":"from nova.notifications.objects import flavor"},{"line_number":30,"context_line":"from nova.objects import base"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_c00ddd38","line":28,"range":{"start_line":27,"start_character":0,"end_line":28,"end_character":30},"in_reply_to":"3a71b18c_71e86117","updated":"2016-12-08 14:00:33.000000000","message":"Done","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f88ad84c119675825c01dec951b2aa3d35b081d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from docutils import nodes"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.notifications.objects import base as notification"},{"line_number":27,"context_line":"from nova.notifications.objects import flavor"},{"line_number":28,"context_line":"from nova.objects import base"},{"line_number":29,"context_line":"# Make sure that all the notification classes are defined so the"},{"line_number":30,"context_line":"# registration mechanism can pick them up later."}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_a0dc6147","line":27,"updated":"2016-12-08 14:06:01.000000000","message":"Let\u0027s order the imports. could you move this import after line 31 to have alphabetical order?","commit_id":"9e398a488e3d2eae9e9c5cc8160dc102678c2d5b"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"e170e8aa67e0401483386f9026632c0a997510e9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from docutils import nodes"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from nova.notifications.objects import base as notification"},{"line_number":27,"context_line":"from nova.notifications.objects import flavor"},{"line_number":28,"context_line":"from nova.objects import base"},{"line_number":29,"context_line":"# Make sure that all the notification classes are defined so the"},{"line_number":30,"context_line":"# registration mechanism can pick them up later."}],"source_content_type":"text/x-python","patch_set":11,"id":"3a71b18c_1b34a6dc","line":27,"in_reply_to":"3a71b18c_a0dc6147","updated":"2016-12-08 14:19:17.000000000","message":"Done","commit_id":"9e398a488e3d2eae9e9c5cc8160dc102678c2d5b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fb179db03d9d39e9cb55f832854e2901635dbd99","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# Make sure that all the notification classes are defined so the"},{"line_number":29,"context_line":"# registration mechanism can pick them up later."},{"line_number":30,"context_line":"from nova.notifications.objects import exception"},{"line_number":31,"context_line":"from nova.notifications.objects import flavor"},{"line_number":32,"context_line":"from nova.notifications.objects import instance"},{"line_number":33,"context_line":"from nova.notifications.objects import service"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_df6b27f0","line":31,"updated":"2017-01-09 11:39:42.000000000","message":"I\u0027m not sure why you need that ? since you\u0027re registering all the notifications objects in L55, why are you needing to import this module only?","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"180fd1a749cb6960a70b2ae38c973468bc008afe","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# Make sure that all the notification classes are defined so the"},{"line_number":29,"context_line":"# registration mechanism can pick them up later."},{"line_number":30,"context_line":"from nova.notifications.objects import exception"},{"line_number":31,"context_line":"from nova.notifications.objects import flavor"},{"line_number":32,"context_line":"from nova.notifications.objects import instance"},{"line_number":33,"context_line":"from nova.notifications.objects import service"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_27d87eef","line":31,"in_reply_to":"ba5201f7_5791db51","updated":"2017-01-10 09:01:50.000000000","message":"Sylvain: L55 is not enough unfortunately. The decorator top of the ovo class needs to be executed to list the ovo class in the registry. If the module containing the definition of the ovo class is never imported then the decorator never executes.","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"ea03ad701fa0b8c9975f74b891a4788728931554","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# Make sure that all the notification classes are defined so the"},{"line_number":29,"context_line":"# registration mechanism can pick them up later."},{"line_number":30,"context_line":"from nova.notifications.objects import exception"},{"line_number":31,"context_line":"from nova.notifications.objects import flavor"},{"line_number":32,"context_line":"from nova.notifications.objects import instance"},{"line_number":33,"context_line":"from nova.notifications.objects import service"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_5791db51","line":31,"in_reply_to":"ba5201f7_df6b27f0","updated":"2017-01-09 12:56:55.000000000","message":"Was suggested by gibi,  and for consistent with instance and service below.","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"}],"doc/notification_samples/flavor-create.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b8d0473b5390af457ddb35cedbd2ff1b040e44b3","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\": \"10\""},{"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":13,"id":"1a6eadb0_a8fa1141","line":18,"updated":"2016-12-15 17:06:49.000000000","message":"Seems that we have problems with the projects and extra_specs fields as they are not in the generated sample. Most probably this is related to the lazy-loading problem. You could read my analysis in the IRC log [1]\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2016-12-15.log.html#t2016-12-15T16:25:13","commit_id":"39ad220a9419bc510ba387ee2fdbfc2a6229b39d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"941ee23cfcaa4141ab991e3abcb6e20429f7e7c9","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\": \"10\""},{"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":13,"id":"da4df55a_10bbdd73","line":18,"in_reply_to":"1a6eadb0_940f74e0","updated":"2016-12-22 01:19:20.000000000","message":"Okay, already split into two patches, thank you for helping on this","commit_id":"39ad220a9419bc510ba387ee2fdbfc2a6229b39d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"8e4e69551d98d5e61c8a782eab447d3d1e52a6e6","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\": \"10\""},{"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":13,"id":"1a6eadb0_de493990","line":18,"in_reply_to":"1a6eadb0_a8fa1141","updated":"2016-12-20 01:01:23.000000000","message":"Hmm, seems we don\u0027t have issue with extra_specs field, projects is the only lazy loaded field [1].\nI don\u0027t really have any clue what should do with this patch now, what\u0027s you suggestion here?\n\n[1]: https://github.com/openstack/nova/blob/master/nova/objects/flavor.py#L349-L355","commit_id":"39ad220a9419bc510ba387ee2fdbfc2a6229b39d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a45bb07e542f4938bf8d2b734678b47321494bc7","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\": \"10\""},{"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":13,"id":"1a6eadb0_c15dde16","line":18,"in_reply_to":"1a6eadb0_a8fa1141","updated":"2016-12-20 01:07:24.000000000","message":"any suggestion would be appreciated, Searchlight would very like this done as soon as possible;)","commit_id":"39ad220a9419bc510ba387ee2fdbfc2a6229b39d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa0479ad48bc94d01d3ed8df20f544c10fa2731c","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\": \"10\""},{"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":13,"id":"1a6eadb0_940f74e0","line":18,"in_reply_to":"1a6eadb0_c15dde16","updated":"2016-12-20 19:10:08.000000000","message":"I have no direct suggestion / solution yet. I think we need extra_spec a projects fields in the json payload even if they are empty as the object model of the FlavorPayload does not make them optional (at the moment there is no way to make them optional). However at the moment I cannot tell you how to do that. What I know that they are not in the json payload because of the if statement [1] of the schema population. This is a generic issue. For example Service.availability_zone also is not included in the json payload today but the object model declares it.\n\nI\u0027m looking into the generic problem and trying to discuss it on the ML [2] as much as the holiday season allows it.\n\nIf this is urgent then I suggest to split the patch into two. First patch adds everything except projects and extra_spec fields then a subsequent patch adds the projects and extra_spec fields. This way we could merge the first patch before we solve the issue with these fields. \n\n[1] https://github.com/openstack/nova/blob/master/nova/notifications/objects/base.py#L97\n[2] http://lists.openstack.org/pipermail/openstack-dev/2016-December/109086.html","commit_id":"39ad220a9419bc510ba387ee2fdbfc2a6229b39d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","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\": \"10\""},{"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":15,"id":"da4df55a_0c97ab3a","line":18,"range":{"start_line":18,"start_character":25,"end_line":18,"end_character":27},"updated":"2016-12-27 19:21:05.000000000","message":"I think this 10 value comes from the REST API samples, but a22d5517-147c-4147-a0d1-e698df5cd4e3 might be nicer to use so it\u0027s consistent with the flavorid used in the other notification samples that are updated in this patch.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","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\": \"10\""},{"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":15,"id":"ba5201f7_68db59ee","line":18,"range":{"start_line":18,"start_character":25,"end_line":18,"end_character":27},"in_reply_to":"da4df55a_0c97ab3a","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"}],"doc/notification_samples/flavor-delete.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e98b20896004fbb3360e1900b7468cd4d969a445","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.0\","},{"line_number":6,"context_line":"        \"nova_object.name\": \"FlavorDestroyPayload\","},{"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":16,"id":"ba5201f7_d2cb0071","line":8,"updated":"2016-12-30 22:12:40.000000000","message":"One thing I\u0027m curious about, and gibi could probably answer, is we seem to be consistent about the payload on delete notifications. For example, in this notification we only give the flavorid, which is OK if you just want the key for correlating the flavor that was deleted. But in other notifications, like for aggregate delete, we have the whole object:\n\nhttps://review.openstack.org/#/c/394512/9/doc/notification_samples/aggregate-delete-end.json\n\nSo we seem to be inconsistent about this.","commit_id":"b74e173d579fbd8620486a1b8234bd4af97919a0"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f0ef7fdbe397db62ee70dc1beb2cfedf01f98189","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.1\","},{"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":19,"id":"ba5201f7_a558e3fb","line":8,"updated":"2017-01-03 02:51:50.000000000","message":"We only have flavorid in Flavor object when deleting[1], so we only get flavorid here in notification.\n\n[1]: https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/flavor_manage.py#L46-L46","commit_id":"287f1c8c3a3e0c364d03f983e0c2dd02c2eaf954"}],"doc/notification_samples/flavor-destroy.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.0\","},{"line_number":6,"context_line":"        \"nova_object.name\": \"FlavorDestroyPayload\","},{"line_number":7,"context_line":"        \"nova_object.data\": {"},{"line_number":8,"context_line":"            \"id\": \"10\""},{"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":15,"id":"da4df55a_6c7bd728","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":15},"updated":"2016-12-27 19:21:05.000000000","message":"Shouldn\u0027t this be flavorid to match what\u0027s in the create sample? We for sure don\u0027t want to leak the internal primary key id field from the flavors or instance_types tables in the database.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"        \"nova_object.version\": \"1.0\","},{"line_number":6,"context_line":"        \"nova_object.name\": \"FlavorDestroyPayload\","},{"line_number":7,"context_line":"        \"nova_object.data\": {"},{"line_number":8,"context_line":"            \"id\": \"10\""},{"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":15,"id":"ba5201f7_08f3ad74","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":15},"in_reply_to":"da4df55a_6c7bd728","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":8,"context_line":"            \"id\": \"10\""},{"line_number":9,"context_line":"        }"},{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    \"event_type\": \"flavor.delete\","},{"line_number":12,"context_line":"    \"publisher_id\": \"nova-api:fake-mini\""},{"line_number":13,"context_line":"}"}],"source_content_type":"application/json","patch_set":15,"id":"da4df55a_ccb763d6","line":11,"range":{"start_line":11,"start_character":26,"end_line":11,"end_character":32},"updated":"2016-12-27 19:21:05.000000000","message":"nit: The notification type is \u0027flavor.delete\u0027 but the sample json file name is flavor-destroy, I could see that being confusing at some point, especially when other delete event types like instance.delete.start has a matching sample filename with \u0027delete\u0027 in the name rather than \u0027destroy\u0027.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"            \"id\": \"10\""},{"line_number":9,"context_line":"        }"},{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    \"event_type\": \"flavor.delete\","},{"line_number":12,"context_line":"    \"publisher_id\": \"nova-api:fake-mini\""},{"line_number":13,"context_line":"}"}],"source_content_type":"application/json","patch_set":15,"id":"ba5201f7_c8e2859f","line":11,"range":{"start_line":11,"start_character":26,"end_line":11,"end_character":32},"in_reply_to":"da4df55a_ccb763d6","updated":"2016-12-30 02:46:36.000000000","message":"hmm, changed the file name to flavor-delete.json","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"}],"doc/notification_samples/instance-create-end.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3168b38ca80506bae60d653a827db81336280242","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    },"},{"line_number":60,"context_line":"    \"priority\":\"INFO\","},{"line_number":61,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":62,"context_line":"}"}],"source_content_type":"application/json","patch_set":5,"id":"5a74a57a_71912a99","line":62,"updated":"2016-11-24 16:26:51.000000000","message":"This seems like an unnecessary change","commit_id":"eaaa68f23cfd6cfaa70e01c0216629a92dda5f0a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \"flavor\": {"},{"line_number":42,"context_line":"                \"nova_object.name\": \"FlavorPayload\","},{"line_number":43,"context_line":"                \"nova_object.data\": {"},{"line_number":44,"context_line":"                    \"id\": \"a22d5517-147c-4147-a0d1-e698df5cd4e3\","},{"line_number":45,"context_line":"                    \"name\": \"test_flavor\","},{"line_number":46,"context_line":"                    \"disk\": 1,"},{"line_number":47,"context_line":"                    \"vcpus\": 1,"}],"source_content_type":"application/json","patch_set":8,"id":"5a74a57a_04c7e945","line":44,"updated":"2016-11-30 16:09:52.000000000","message":"Some of these are non-backward compatible changes. See my detailed comment in the flavor.py","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"}],"doc/notification_samples/instance-create-error.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3168b38ca80506bae60d653a827db81336280242","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    },"},{"line_number":57,"context_line":"    \"priority\":\"ERROR\","},{"line_number":58,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":59,"context_line":"}"}],"source_content_type":"application/json","patch_set":5,"id":"5a74a57a_995180db","line":59,"updated":"2016-11-24 16:26:51.000000000","message":"Seems like an unnecessary change","commit_id":"eaaa68f23cfd6cfaa70e01c0216629a92dda5f0a"}],"doc/notification_samples/instance-create-start.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3168b38ca80506bae60d653a827db81336280242","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    },"},{"line_number":47,"context_line":"    \"priority\":\"INFO\","},{"line_number":48,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":49,"context_line":"}"}],"source_content_type":"application/json","patch_set":5,"id":"5a74a57a_796d8497","line":49,"updated":"2016-11-24 16:26:51.000000000","message":"Seems like an unnecessary change","commit_id":"eaaa68f23cfd6cfaa70e01c0216629a92dda5f0a"}],"doc/notification_samples/instance-power_on-end.json":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"fb179db03d9d39e9cb55f832854e2901635dbd99","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    },"},{"line_number":66,"context_line":"    \"priority\":\"INFO\","},{"line_number":67,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":68,"context_line":"}"}],"source_content_type":"application/json","patch_set":21,"id":"ba5201f7_5f573726","line":68,"updated":"2017-01-09 11:39:42.000000000","message":"not really a needed modification, right?","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"ea03ad701fa0b8c9975f74b891a4788728931554","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    },"},{"line_number":66,"context_line":"    \"priority\":\"INFO\","},{"line_number":67,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":68,"context_line":"}"}],"source_content_type":"application/json","patch_set":21,"id":"ba5201f7_97ba6309","line":68,"in_reply_to":"ba5201f7_5f573726","updated":"2017-01-09 12:56:55.000000000","message":"I didn\u0027t modify this line locally actually:(, maybe a git issue?","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"69e6cc0b1029f9c5c841195baf526b5bc5ea24ba","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    },"},{"line_number":66,"context_line":"    \"priority\":\"INFO\","},{"line_number":67,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":68,"context_line":"}"}],"source_content_type":"application/json","patch_set":21,"id":"ba5201f7_c2aaf518","line":68,"in_reply_to":"ba5201f7_67f9a64d","updated":"2017-01-11 14:15:22.000000000","message":"Yeah, that\u0027s probable due to Li\u0027s IDE that adds a new line.","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"180fd1a749cb6960a70b2ae38c973468bc008afe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    },"},{"line_number":66,"context_line":"    \"priority\":\"INFO\","},{"line_number":67,"context_line":"    \"publisher_id\":\"nova-compute:compute\""},{"line_number":68,"context_line":"}"}],"source_content_type":"application/json","patch_set":21,"id":"ba5201f7_67f9a64d","line":68,"in_reply_to":"ba5201f7_97ba6309","updated":"2017-01-10 09:01:50.000000000","message":"I haven\u0027t checked but it could be a new-line-at-the-end-of-the-file type of difference.","commit_id":"f9b63ab92c64931bc6fc46d5cbeefe6558bce51e"}],"nova/notifications/objects/flavor.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3b1b946c1b1e25e719d7590ab0ed9053dabf0059","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":33,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":34,"context_line":"    # Version 1.0: Initial version"},{"line_number":35,"context_line":"    SCHEMA \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_b54acc81","line":33,"updated":"2016-11-16 09:57:16.000000000","message":"We have a very similar payload object already in https://github.com/openstack/nova/blob/master/nova/notifications/objects/instance.py#L188 \n\nI suggest to move that here and extend it if needed instead of creating a new object","commit_id":"37d0d9cac2aac90f5e1dd5fecd6aedd29e5819fe"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"20a2dbd3f06d83714c480ff80b52aeec6266b6cb","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":33,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":34,"context_line":"    # Version 1.0: Initial version"},{"line_number":35,"context_line":"    SCHEMA \u003d {"},{"line_number":36,"context_line":"        \u0027id\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_4997f539","line":33,"in_reply_to":"7a77a97e_b54acc81","updated":"2016-11-17 01:36:15.000000000","message":"It pretty different in \u0027SCHEMA\u0027, \u0027fields\u0027 and __init__, how about changing the class name to InstanceFlavorPayload for the one in instance.py","commit_id":"37d0d9cac2aac90f5e1dd5fecd6aedd29e5819fe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027is_public\u0027: (\u0027flavor\u0027, \u0027is_public\u0027),"},{"line_number":52,"context_line":"        \u0027extra_specs\u0027: (\u0027flavor\u0027, \u0027extra_specs\u0027),"},{"line_number":53,"context_line":"        \u0027projects\u0027: (\u0027flavor\u0027, \u0027projects\u0027),"},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    fields \u003d {"},{"line_number":57,"context_line":"        \u0027id\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_24f145ce","line":54,"updated":"2016-11-30 16:09:52.000000000","message":"now this is not a backward compatible change as this patch is not just add new fields but rename some of the existing ones. In the FlavorPayload 1.0 there was falvorid, memory_mb, root_gb, ephemeral_gb but now these are not in the proposed 1.1 .\n\nWe have two ways to move forward.\n1) keep the names that was introduced in 1.0 and just extend the payload with the new fields in 1.1\n2) we bump the payload version from 1.0 to 2.0 to signal a non-backward compatible change and rename the old fields.\n\nI\u0027m a bit afraid of 2) without discussing it with other from nova.","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027is_public\u0027: (\u0027flavor\u0027, \u0027is_public\u0027),"},{"line_number":52,"context_line":"        \u0027extra_specs\u0027: (\u0027flavor\u0027, \u0027extra_specs\u0027),"},{"line_number":53,"context_line":"        \u0027projects\u0027: (\u0027flavor\u0027, \u0027projects\u0027),"},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    fields \u003d {"},{"line_number":57,"context_line":"        \u0027id\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_110f1689","line":54,"in_reply_to":"5a74a57a_24f145ce","updated":"2016-12-01 02:15:44.000000000","message":"OK, then i\u0027m intend to use 1) and maybe add a note here for 2) if needed.","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":74,"context_line":"                                                       target_version)"},{"line_number":75,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":76,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":77,"context_line":"            primitive[\u0027flavorid\u0027] \u003d primitive.pop(\u0027id\u0027, None)"},{"line_number":78,"context_line":"            primitive[\u0027memory_mb\u0027] \u003d primitive.pop(\u0027ram\u0027, None)"},{"line_number":79,"context_line":"            primitive[\u0027root_gb\u0027] \u003d primitive.pop(\u0027disk\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_a981aefd","line":76,"updated":"2016-11-30 16:09:52.000000000","message":"this is a nice to have thing. At the moment we does not support backporting notification payloads but it is good that you added this so if in the future we will then this will be useful","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":74,"context_line":"                                                       target_version)"},{"line_number":75,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":76,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":77,"context_line":"            primitive[\u0027flavorid\u0027] \u003d primitive.pop(\u0027id\u0027, None)"},{"line_number":78,"context_line":"            primitive[\u0027memory_mb\u0027] \u003d primitive.pop(\u0027ram\u0027, None)"},{"line_number":79,"context_line":"            primitive[\u0027root_gb\u0027] \u003d primitive.pop(\u0027disk\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_3125f2c1","line":76,"in_reply_to":"5a74a57a_a981aefd","updated":"2016-12-01 02:15:44.000000000","message":":)","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __init__(self, obj, **kwargs):"},{"line_number":91,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"},{"line_number":92,"context_line":"        if hasattr(obj, \u0027flavor\u0027):"},{"line_number":93,"context_line":"            self.populate_schema(instance\u003dobj, flavor\u003dobj.flavor)"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.populate_schema(flavor\u003dobj)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_49ef3ab0","line":92,"updated":"2016-11-30 16:09:52.000000000","message":"as this payload does not use anything from the instance directly it is enough to pass and use the flavor. You can change the old calls to pass in instance.flavor instead of instance and the you can avoid this if","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __init__(self, obj, **kwargs):"},{"line_number":91,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"},{"line_number":92,"context_line":"        if hasattr(obj, \u0027flavor\u0027):"},{"line_number":93,"context_line":"            self.populate_schema(instance\u003dobj, flavor\u003dobj.flavor)"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.populate_schema(flavor\u003dobj)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_912a468f","line":92,"in_reply_to":"5a74a57a_49ef3ab0","updated":"2016-12-01 02:15:44.000000000","message":"Done","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e9dfe02c9b8e14116d047ec17680aca9d7424ae7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from nova.objects import fields"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@base.notification_sample(\u0027flavor-create.json\u0027)"},{"line_number":24,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":25,"context_line":"class FlavorNotification(base.NotificationBase):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_09ffe467","line":23,"updated":"2016-12-02 16:17:17.000000000","message":"flavor-update.json is missing from here","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3bcb9c6afe5939b747f55f4a1fefbb652a3be465","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from nova.objects import fields"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@base.notification_sample(\u0027flavor-create.json\u0027)"},{"line_number":24,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":25,"context_line":"class FlavorNotification(base.NotificationBase):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_df667a28","line":23,"in_reply_to":"3a71b18c_09ffe467","updated":"2016-12-02 16:50:12.000000000","message":"Added","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"48383e8bb922dbc026acd4176f862f6ed96a0a32","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":36,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":37,"context_line":"    # Version 1.0: Initial version"},{"line_number":38,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_0eb7f5f5","line":37,"updated":"2016-12-08 20:52:42.000000000","message":"Might want to add \"Initial version -- was originally in instance_notification.FlavorPayload\" or similar.","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"65eeb9b485a28dbae500d37e84764fa084bd2dba","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":36,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":37,"context_line":"    # Version 1.0: Initial version"},{"line_number":38,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_63931afb","line":37,"in_reply_to":"3a71b18c_0eb7f5f5","updated":"2016-12-09 01:01:53.000000000","message":"Done","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"48383e8bb922dbc026acd4176f862f6ed96a0a32","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # NOTE: if we\u0027d want to rename some fileds(memory_mb-\u003eram, root_gb-\u003edisk,"},{"line_number":42,"context_line":"    # ephemeral_gb: ephemeral), bumping to payload version 2.0 will be needed."},{"line_number":43,"context_line":"    SCHEMA \u003d {"},{"line_number":44,"context_line":"        \u0027flavorid\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_0ee0d5f9","line":41,"updated":"2016-12-08 20:52:42.000000000","message":"s/fileds/fields/","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"65eeb9b485a28dbae500d37e84764fa084bd2dba","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":39,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    # NOTE: if we\u0027d want to rename some fileds(memory_mb-\u003eram, root_gb-\u003edisk,"},{"line_number":42,"context_line":"    # ephemeral_gb: ephemeral), bumping to payload version 2.0 will be needed."},{"line_number":43,"context_line":"    SCHEMA \u003d {"},{"line_number":44,"context_line":"        \u0027flavorid\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_a3bb7274","line":41,"in_reply_to":"3a71b18c_0ee0d5f9","updated":"2016-12-09 01:01:53.000000000","message":"Done","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    fields \u003d {"},{"line_number":59,"context_line":"        \u0027flavorid\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(),"},{"line_number":62,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(),"},{"line_number":63,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_2c38ef3c","line":60,"updated":"2016-12-27 19:21:05.000000000","message":"Why is name nullable? It\u0027s not optional in the os-flavors REST API. I guess this is probably because name is nullable on the Flavor object, but it\u0027s actually not nullable in the API DB schema, so the nullable\u003dTrue on the nova.objects.flavor.Flavor object seems like a mistake and we shouldn\u0027t continue that here.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    fields \u003d {"},{"line_number":59,"context_line":"        \u0027flavorid\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(),"},{"line_number":62,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(),"},{"line_number":63,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_289f9104","line":60,"in_reply_to":"da4df55a_2c38ef3c","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \u0027vcpu_weight\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":68,"context_line":"        \u0027disabled\u0027: fields.BooleanField(),"},{"line_number":69,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":70,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":71,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_d7837054","line":71,"range":{"start_line":70,"start_character":8,"end_line":71,"end_character":48},"updated":"2016-12-27 19:21:05.000000000","message":"Why don\u0027t we add these, along with the schema above, in the next patch in this series that deals with updates? Because none of the sample notifications in this patch has these fields in it.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \u0027vcpu_weight\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":68,"context_line":"        \u0027disabled\u0027: fields.BooleanField(),"},{"line_number":69,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":70,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":71,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_c8f9a54f","line":71,"range":{"start_line":70,"start_character":8,"end_line":71,"end_character":48},"in_reply_to":"da4df55a_d7837054","updated":"2016-12-30 02:46:36.000000000","message":"moved to the next patch:)","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f5f75c7f3553064dcc0c2f4d266d2885aa63d0f9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":75,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":76,"context_line":"                                                       target_version)"},{"line_number":77,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":78,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":79,"context_line":"            primitive.pop(\u0027name\u0027, None)"},{"line_number":80,"context_line":"            primitive.pop(\u0027swap\u0027, None)"},{"line_number":81,"context_line":"            primitive.pop(\u0027rxtx_factor\u0027, None)"},{"line_number":82,"context_line":"            primitive.pop(\u0027vcpu_weight\u0027, None)"},{"line_number":83,"context_line":"            primitive.pop(\u0027disabled\u0027, None)"},{"line_number":84,"context_line":"            primitive.pop(\u0027is_public\u0027, None)"},{"line_number":85,"context_line":"            primitive.pop(\u0027extra_specs\u0027, None)"},{"line_number":86,"context_line":"            primitive.pop(\u0027projects\u0027, None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, flavor, **kwargs):"},{"line_number":89,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_f795d432","line":86,"range":{"start_line":74,"start_character":4,"end_line":86,"end_character":43},"updated":"2016-12-27 19:22:41.000000000","message":"I don\u0027t see a unit test for this.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":75,"context_line":"        super(FlavorPayload, self).obj_make_compatible(primitive,"},{"line_number":76,"context_line":"                                                       target_version)"},{"line_number":77,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":78,"context_line":"        if target_version \u003c (1, 1):"},{"line_number":79,"context_line":"            primitive.pop(\u0027name\u0027, None)"},{"line_number":80,"context_line":"            primitive.pop(\u0027swap\u0027, None)"},{"line_number":81,"context_line":"            primitive.pop(\u0027rxtx_factor\u0027, None)"},{"line_number":82,"context_line":"            primitive.pop(\u0027vcpu_weight\u0027, None)"},{"line_number":83,"context_line":"            primitive.pop(\u0027disabled\u0027, None)"},{"line_number":84,"context_line":"            primitive.pop(\u0027is_public\u0027, None)"},{"line_number":85,"context_line":"            primitive.pop(\u0027extra_specs\u0027, None)"},{"line_number":86,"context_line":"            primitive.pop(\u0027projects\u0027, None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, flavor, **kwargs):"},{"line_number":89,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_2b414b0c","line":86,"range":{"start_line":74,"start_character":4,"end_line":86,"end_character":43},"in_reply_to":"da4df55a_f795d432","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            primitive.pop(\u0027extra_specs\u0027, None)"},{"line_number":86,"context_line":"            primitive.pop(\u0027projects\u0027, None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, flavor, **kwargs):"},{"line_number":89,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"},{"line_number":90,"context_line":"        self.populate_schema(flavor\u003dflavor)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_6c5d9746","line":88,"updated":"2016-12-27 19:21:05.000000000","message":"nit: I\u0027d move this before object_make_compatible.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            primitive.pop(\u0027extra_specs\u0027, None)"},{"line_number":86,"context_line":"            primitive.pop(\u0027projects\u0027, None)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, flavor, **kwargs):"},{"line_number":89,"context_line":"        super(FlavorPayload, self).__init__(**kwargs)"},{"line_number":90,"context_line":"        self.populate_schema(flavor\u003dflavor)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_a8fc613f","line":88,"in_reply_to":"da4df55a_6c5d9746","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    SCHEMA \u003d {"},{"line_number":110,"context_line":"        \u0027id\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_8c563b28","line":110,"range":{"start_line":110,"start_character":9,"end_line":110,"end_character":11},"updated":"2016-12-27 19:21:05.000000000","message":"We should name this flavorid to be consistent with the create notification.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    SCHEMA \u003d {"},{"line_number":110,"context_line":"        \u0027id\u0027: (\u0027flavor\u0027, \u0027flavorid\u0027),"},{"line_number":111,"context_line":"    }"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_88ff9d33","line":110,"range":{"start_line":110,"start_character":9,"end_line":110,"end_character":11},"in_reply_to":"da4df55a_8c563b28","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e98b20896004fbb3360e1900b7468cd4d969a445","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_12c66867","side":"PARENT","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":1},"updated":"2016-12-30 22:12:40.000000000","message":"You don\u0027t need to remove this here now, you should remove it in the earlier patch in the series. :)","commit_id":"169b5f6e85b89fd6c86d887114ff449317aa238c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0c10c66302d840e43462b508391af6ebcf32d2b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2016 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_52e2b0d6","side":"PARENT","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":1},"in_reply_to":"ba5201f7_12c66867","updated":"2016-12-30 22:34:02.000000000","message":"Done","commit_id":"169b5f6e85b89fd6c86d887114ff449317aa238c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e98b20896004fbb3360e1900b7468cd4d969a445","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    }"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027flavorid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027ephemeral_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, instance, **kwargs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_92b098f6","side":"PARENT","line":39,"range":{"start_line":35,"start_character":8,"end_line":39,"end_character":59},"updated":"2016-12-30 22:12:40.000000000","message":"As noted before, these are nullable\u003dTrue right now, but in this change you\u0027ve made them non-nullable, and I\u0027m not sure why - I guess to be consistent with the Flavor object, but it\u0027s an unrelated change.","commit_id":"169b5f6e85b89fd6c86d887114ff449317aa238c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0c10c66302d840e43462b508391af6ebcf32d2b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    }"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    fields \u003d {"},{"line_number":35,"context_line":"        \u0027flavorid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027ephemeral_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, instance, **kwargs):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_92ec18c9","side":"PARENT","line":39,"range":{"start_line":35,"start_character":8,"end_line":39,"end_character":59},"in_reply_to":"ba5201f7_92b098f6","updated":"2016-12-30 22:34:02.000000000","message":"Done","commit_id":"169b5f6e85b89fd6c86d887114ff449317aa238c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e98b20896004fbb3360e1900b7468cd4d969a445","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":32,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":33,"context_line":"    # Initial Version 1.0: Initial version"},{"line_number":34,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":35,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_52a630c2","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":13},"updated":"2016-12-30 22:12:40.000000000","message":"nit: Drop \u0027Initial\u0027 here, that\u0027s why there is a diff on this line now and it seems to throw off the rest of the diff so it makes this hard to review.","commit_id":"b74e173d579fbd8620486a1b8234bd4af97919a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0c10c66302d840e43462b508391af6ebcf32d2b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":32,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":33,"context_line":"    # Initial Version 1.0: Initial version"},{"line_number":34,"context_line":"    # Version 1.1: Add other fields for Flavor"},{"line_number":35,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_72e7b4e4","line":33,"range":{"start_line":33,"start_character":6,"end_line":33,"end_character":13},"in_reply_to":"ba5201f7_52a630c2","updated":"2016-12-30 22:34:02.000000000","message":"Done","commit_id":"b74e173d579fbd8620486a1b8234bd4af97919a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a4fb5dfeee8e7695ffeb2fdb7d1aabb2ef3b596","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    fields \u003d {"},{"line_number":105,"context_line":"        \u0027flavorid\u0027: fields.StringField(),"},{"line_number":106,"context_line":"    }"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self, flavor):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_21a8781f","line":105,"updated":"2017-01-01 16:23:34.000000000","message":"Based on the ML discussion here, the delete payload should be consistent with the create payload:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2017-January/109508.html","commit_id":"d59d4ff7ff53194af6afd7445fae176b1dbc34f4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"e84aa8ae74ebfd4380f7b051afe44eefc67f87fb","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    }"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    fields \u003d {"},{"line_number":105,"context_line":"        \u0027flavorid\u0027: fields.StringField(),"},{"line_number":106,"context_line":"    }"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self, flavor):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_582d5fa6","line":105,"in_reply_to":"ba5201f7_21a8781f","updated":"2017-01-03 00:56:42.000000000","message":"Okay, will upload a new patch based on this.","commit_id":"d59d4ff7ff53194af6afd7445fae176b1dbc34f4"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3168b38ca80506bae60d653a827db81336280242","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":188,"context_line":"class InstanceFlavorPayload(base.NotificationPayloadBase):"},{"line_number":189,"context_line":"    # Version 1.0: Initial version"},{"line_number":190,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_6ef3059f","line":188,"updated":"2016-11-24 16:26:51.000000000","message":"I still think we don\u0027t need two separate payload classes for flavors.\nI suggest to have a single FlavorPayload object. Use the existing class for that but add the new fields you need and bump the version to signal the change.","commit_id":"eaaa68f23cfd6cfaa70e01c0216629a92dda5f0a"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"e8ddf327b8346f0f3c4ad074348ac3d9db6b9bdd","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":188,"context_line":"class InstanceFlavorPayload(base.NotificationPayloadBase):"},{"line_number":189,"context_line":"    # Version 1.0: Initial version"},{"line_number":190,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_6553b76b","line":188,"in_reply_to":"5a74a57a_6ef3059f","updated":"2016-11-28 14:16:29.000000000","message":"Done","commit_id":"eaaa68f23cfd6cfaa70e01c0216629a92dda5f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":188,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":189,"context_line":"    # Version 1.0: Initial version"},{"line_number":190,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_8c2d5baa","side":"PARENT","line":188,"updated":"2016-12-27 19:21:05.000000000","message":"I kind of wish you would have done this refactor piece in an earlier patch in this series so the Flavor object changes in the new flavor.py module didn\u0027t look brand new - it makes it harder to diff the version and fields changes.","commit_id":"6f1a39d7dcb64efb1208bc0ac6d4a244316f86c5"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"@nova_base.NovaObjectRegistry.register_notification"},{"line_number":188,"context_line":"class FlavorPayload(base.NotificationPayloadBase):"},{"line_number":189,"context_line":"    # Version 1.0: Initial version"},{"line_number":190,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_688999ca","side":"PARENT","line":188,"in_reply_to":"da4df55a_8c2d5baa","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"6f1a39d7dcb64efb1208bc0ac6d4a244316f86c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    fields \u003d {"},{"line_number":201,"context_line":"        \u0027flavorid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":202,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":203,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":204,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":205,"context_line":"        \u0027ephemeral_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":206,"context_line":"    }"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def __init__(self, instance, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_5715c03d","side":"PARENT","line":205,"range":{"start_line":201,"start_character":8,"end_line":205,"end_character":59},"updated":"2016-12-27 19:21:05.000000000","message":"When you moved these you dropped the nullable\u003dTrue part, why? I\u0027m not really sure why they are nullable\u003dTrue to begin with, but still that is another example of how the refactor in the same patch as the other changes makes this easy to miss.","commit_id":"6f1a39d7dcb64efb1208bc0ac6d4a244316f86c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f095574d5943d2e1cc2516255281e6a2b16cae6f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    fields \u003d {"},{"line_number":201,"context_line":"        \u0027flavorid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":202,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":203,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":204,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":205,"context_line":"        \u0027ephemeral_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":206,"context_line":"    }"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def __init__(self, instance, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_f203a4b6","side":"PARENT","line":205,"range":{"start_line":201,"start_character":8,"end_line":205,"end_character":59},"in_reply_to":"ba5201f7_c8a7e54d","updated":"2016-12-30 21:56:06.000000000","message":"OK if there was a reason why these were different from the Flavor object fields then I\u0027m assuming gibi might know and we\u0027d have to ask him.","commit_id":"6f1a39d7dcb64efb1208bc0ac6d4a244316f86c5"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    }"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    fields \u003d {"},{"line_number":201,"context_line":"        \u0027flavorid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":202,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":203,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":204,"context_line":"        \u0027root_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":205,"context_line":"        \u0027ephemeral_gb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":206,"context_line":"    }"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def __init__(self, instance, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_c8a7e54d","side":"PARENT","line":205,"range":{"start_line":201,"start_character":8,"end_line":205,"end_character":59},"in_reply_to":"da4df55a_5715c03d","updated":"2016-12-30 02:46:36.000000000","message":"I was following the flavor object for no special reason: https://github.com/openstack/nova/blob/master/nova/objects/flavor.py#L209-L224","commit_id":"6f1a39d7dcb64efb1208bc0ac6d4a244316f86c5"}],"nova/objects/flavor.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"037779e9b4d66a0683cecaf8386cca2a2de5c04e","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_adf44a87","line":580,"updated":"2016-12-02 11:55:34.000000000","message":"The projects is lazy loaded field. If the Flavor object is loaded from the db without projects field but notification is sent due to an update on the object then the payload population code will access projects field and therefore force to load the projects fields from the db. This might be a performance problem. I don\u0027t know what is the way forward here. Let\u0027s ping dansmith about it.","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f9ca6fd6157f0844e34c7977a15645522499c051","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_55605aa5","line":580,"in_reply_to":"1a6eadb0_05434243","updated":"2016-12-15 02:27:44.000000000","message":"FlavorPayload create/update doesn\u0027t mean flavor create/update, and the flavor notification is sent only when flavor is created/updated/deleted, right?","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f8b1afd89427623e85a6854ab98fde2aff7c280a","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_bb2d0b48","line":580,"in_reply_to":"1a6eadb0_55605aa5","updated":"2016-12-15 12:24:46.000000000","message":"You are correct. This discussion is now at the wrong source code line. \nThe issue is that the FlavorPayload needs the projects field and the FlavorPayload is used in the InstancePayload so transitively the InstancePayload needs the projects field of the flavor. So if accessing the projects field causes extra db load then emitting InstancePayload based notifications also causes that extra db load.","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"23cd20eaab2fffb0e2e2a9e0222068bee5691313","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_d612ebb3","line":580,"in_reply_to":"1a6eadb0_9e826193","updated":"2016-12-14 05:50:17.000000000","message":"Hi, Balazs, i did some test, but i didn\u0027t get the any flavor related notification when creating or updating instance, did i miss something here?","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5313eae014c35a48953978fe16039816ee7e0e13","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_05434243","line":580,"in_reply_to":"1a6eadb0_d612ebb3","updated":"2016-12-14 09:47:03.000000000","message":"The InstancePayload has a flavor field that is the same FlavorPayload as the one extended in this patch. As this patch adds project to the FlavorPayload and InstancePayload has a FlavorPayload embedded this causes that every InstancePayload creation means a FlavorPayload creation as well. So in theory sending any instance notification will cause now to fetch not just the normal fields of flavor but also the lazy loaded project field. \n\nThis was the theory above. \n\nI added a some trace to the flavor code that do the lazy load [1] to verify my theory above. Then I run the notificaiton tests to see if [1] is really triggered by instance related notification sending. My test result shows it doesn\u0027t. So now I\u0027m puzzled now.\n\n[1]https://github.com/openstack/nova/blob/master/nova/objects/flavor.py#L349","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7ae600d1271b34c783f43c87d2db79359aae130f","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_ae543621","line":580,"in_reply_to":"3a71b18c_1558d931","updated":"2016-12-02 16:12:36.000000000","message":"We discussed with Dan on IRC [1] and agreed that changing the flavor is admin action and it is not frequent. So performance is not a concern.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2016-12-02.log.html#t2016-12-02T15:50:52","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f8e84a56649f394ea4f2f2d9e063ae863c2a4b4c","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_9e826193","line":580,"in_reply_to":"3a71b18c_5fac2a35","updated":"2016-12-13 17:52:43.000000000","message":"We just realized with sneti [1] that every instance notification has a FlavorPayload attached and to fill that FlavorPayload we will trigger this lazy load too. So this is not infrequent any more as instance-exists is periodical and instance-update also can be somewhat frequent. Also this means not only admin actions will trigger the extra db load but any VM lifecycle event will. \n\nI think we have to revisit the problem.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2016-12-13.log.html#t2016-12-13T17:42:21","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e3a0c7df7d372b98e7613eb6a29b9f1c951a678","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_1558d931","line":580,"in_reply_to":"3a71b18c_adf44a87","updated":"2016-12-02 14:52:54.000000000","message":"If you know you will always need these fields for the notification, then it makes sense to pre-load them. However, you may not know that where the object is loaded (i.e. prior to the save). If it\u0027s only something you need some of the time, then that\u0027s what lazy loading is supposed to help with. Don\u0027t always load it, but load it when you need it.\n\nAnother alternative would be to do some accounting here, and if you need to do a save that would trigger a notification, then load both projects and extra_specs together in one DB operation so that you\u0027re ready for the notification step, and then do one notification afterwards to indicate the change.","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3bcb9c6afe5939b747f55f4a1fefbb652a3be465","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_5fac2a35","line":580,"in_reply_to":"3a71b18c_ae543621","updated":"2016-12-02 16:50:12.000000000","message":"ok","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"037779e9b4d66a0683cecaf8386cca2a2de5c04e","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        # we collect the added/deleted lists for both above and /then/"},{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    @staticmethod"},{"line_number":586,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_ad928a9d","line":583,"range":{"start_line":579,"start_character":1,"end_line":583,"end_character":64},"updated":"2016-12-02 11:55:34.000000000","message":"Will a single save() that updates both extra_specs and projects will emit two separate notifications? It might be overkill to emit two.","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7ae600d1271b34c783f43c87d2db79359aae130f","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        # we collect the added/deleted lists for both above and /then/"},{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    @staticmethod"},{"line_number":586,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_ce189287","line":583,"range":{"start_line":579,"start_character":1,"end_line":583,"end_character":64},"in_reply_to":"3a71b18c_ad928a9d","updated":"2016-12-02 16:12:36.000000000","message":"We also discussed this with Dan and agreed to send a single notification for a single save() call.","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3bcb9c6afe5939b747f55f4a1fefbb652a3be465","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        # we collect the added/deleted lists for both above and /then/"},{"line_number":577,"context_line":"        # call these methods to update them."},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"        if added_keys or deleted_keys:"},{"line_number":580,"context_line":"            self.save_extra_specs(self.extra_specs, deleted_keys)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        if added_projects or deleted_projects:"},{"line_number":583,"context_line":"            self.save_projects(added_projects, deleted_projects)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    @staticmethod"},{"line_number":586,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_9fa6c251","line":583,"range":{"start_line":579,"start_character":1,"end_line":583,"end_character":64},"in_reply_to":"3a71b18c_ce189287","updated":"2016-12-02 16:50:12.000000000","message":"updated in the ps10","commit_id":"572b985169ff44bff74a99c55fae33bbe5267077"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3297c540178f19fc81edf87138879b006afa6901","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":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    @staticmethod"},{"line_number":586,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_3f815590","line":583,"updated":"2016-12-08 12:10:45.000000000","message":"If neither projects nor extra_specs are changed in the save then this code will still emit an update notification. But I think it is not a big issue.","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"5fce21b63c03e93704a3192e45a5d3e59720d582","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":"        self._send_notification(fields.NotificationAction.UPDATE)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    @staticmethod"},{"line_number":586,"context_line":"    def _flavor_destroy(context, flavor_id\u003dNone, flavorid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_caba5e6e","line":583,"in_reply_to":"3a71b18c_3f815590","updated":"2016-12-08 14:00:33.000000000","message":"Yes, added an if condition.","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3297c540178f19fc81edf87138879b006afa6901","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        payload \u003d payload_type(self)"},{"line_number":616,"context_line":"        notification_type("},{"line_number":617,"context_line":"            publisher\u003dnotification.NotificationPublisher("},{"line_number":618,"context_line":"                host\u003dCONF.host, binary\u003d\"nova-api\"),"},{"line_number":619,"context_line":"            event_type\u003dnotification.EventType(object\u003d\"flavor\","},{"line_number":620,"context_line":"                                              action\u003daction),"},{"line_number":621,"context_line":"            priority\u003dfields.NotificationPriority.INFO,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_1f09f931","line":618,"range":{"start_line":618,"start_character":40,"end_line":618,"end_character":48},"updated":"2016-12-08 12:10:45.000000000","message":"This is a good question which service will emit this notification for sure nova-api one of those but nova-conductor can be also. I think we have no easy way to decide in run time where the call is originated from so it is OK as is.","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"5fce21b63c03e93704a3192e45a5d3e59720d582","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        payload \u003d payload_type(self)"},{"line_number":616,"context_line":"        notification_type("},{"line_number":617,"context_line":"            publisher\u003dnotification.NotificationPublisher("},{"line_number":618,"context_line":"                host\u003dCONF.host, binary\u003d\"nova-api\"),"},{"line_number":619,"context_line":"            event_type\u003dnotification.EventType(object\u003d\"flavor\","},{"line_number":620,"context_line":"                                              action\u003daction),"},{"line_number":621,"context_line":"            priority\u003dfields.NotificationPriority.INFO,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_ea0b9a29","line":618,"range":{"start_line":618,"start_character":40,"end_line":618,"end_character":48},"in_reply_to":"3a71b18c_1f09f931","updated":"2016-12-08 14:00:33.000000000","message":":)","commit_id":"0baf5452bb3858d010525d4de1805433d3784ef4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","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":15,"id":"da4df55a_176c18cf","line":450,"updated":"2016-12-27 19:21:05.000000000","message":"Shouldn\u0027t this happen in the following change that deals with update notifications?","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","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":15,"id":"ba5201f7_8874fdcf","line":450,"in_reply_to":"da4df55a_176c18cf","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","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":15,"id":"da4df55a_576a20b4","line":465,"updated":"2016-12-27 19:21:05.000000000","message":"same","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","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":15,"id":"ba5201f7_487215e7","line":465,"in_reply_to":"da4df55a_576a20b4","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _send_notification(self, action):"},{"line_number":605,"context_line":"        if action in [fields.NotificationAction.CREATE,"},{"line_number":606,"context_line":"                      fields.NotificationAction.UPDATE]:"},{"line_number":607,"context_line":"            notification_type \u003d flavor_notification.FlavorNotification"},{"line_number":608,"context_line":"            payload_type \u003d flavor_notification.FlavorPayload"},{"line_number":609,"context_line":"        if action \u003d\u003d fields.NotificationAction.DELETE:"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_17a33801","line":606,"range":{"start_line":606,"start_character":22,"end_line":606,"end_character":54},"updated":"2016-12-27 19:21:05.000000000","message":"Again it seems this should come in the next patch.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def _send_notification(self, action):"},{"line_number":605,"context_line":"        if action in [fields.NotificationAction.CREATE,"},{"line_number":606,"context_line":"                      fields.NotificationAction.UPDATE]:"},{"line_number":607,"context_line":"            notification_type \u003d flavor_notification.FlavorNotification"},{"line_number":608,"context_line":"            payload_type \u003d flavor_notification.FlavorPayload"},{"line_number":609,"context_line":"        if action \u003d\u003d fields.NotificationAction.DELETE:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_6877d9d4","line":606,"range":{"start_line":606,"start_character":22,"end_line":606,"end_character":54},"in_reply_to":"da4df55a_17a33801","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"74278292f7492e189c3a07073d975fd3bb654b37","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        query \u003d query.filter(api_models.Flavors.id \u003d\u003d flavor_id)"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        query \u003d query.filter(api_models.Flavors.flavorid \u003d\u003d flavorid)"},{"line_number":183,"context_line":"    result \u003d query.first()"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    if not result:"},{"line_number":186,"context_line":"        raise exception.FlavorNotFound(flavor_id\u003d(flavor_id or flavorid))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_74277512","line":183,"updated":"2017-01-03 17:29:55.000000000","message":"For destroy(), could we return this result and use it to call _from_db_object prior to sending the delete notification so we have the loaded up flavor object (it would probably be missing extra_specs and projects though).","commit_id":"287f1c8c3a3e0c364d03f983e0c2dd02c2eaf954"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"75051cbcd1fd21cd237e9bd3156486d490ea03fa","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        query \u003d query.filter(api_models.Flavors.id \u003d\u003d flavor_id)"},{"line_number":181,"context_line":"    else:"},{"line_number":182,"context_line":"        query \u003d query.filter(api_models.Flavors.flavorid \u003d\u003d flavorid)"},{"line_number":183,"context_line":"    result \u003d query.first()"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    if not result:"},{"line_number":186,"context_line":"        raise exception.FlavorNotFound(flavor_id\u003d(flavor_id or flavorid))"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_70305302","line":183,"in_reply_to":"ba5201f7_74277512","updated":"2017-01-04 01:33:14.000000000","message":"Great, done!","commit_id":"287f1c8c3a3e0c364d03f983e0c2dd02c2eaf954"}],"nova/tests/functional/notification_sample_tests/notification_sample_base.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"48383e8bb922dbc026acd4176f862f6ed96a0a32","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                  }}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        flavor_id \u003d self.api.post_flavor(flavor_body)[\u0027id\u0027]"},{"line_number":149,"context_line":"        # Ingore the create flavor notification"},{"line_number":150,"context_line":"        fake_notifier.reset()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        server \u003d self._build_minimal_create_server_request("}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_ceb89dca","line":149,"updated":"2016-12-08 20:52:42.000000000","message":"s/Ingore/Ignore/","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"65eeb9b485a28dbae500d37e84764fa084bd2dba","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                  }}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        flavor_id \u003d self.api.post_flavor(flavor_body)[\u0027id\u0027]"},{"line_number":149,"context_line":"        # Ingore the create flavor notification"},{"line_number":150,"context_line":"        fake_notifier.reset()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        server \u003d self._build_minimal_create_server_request("}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_c365ce1d","line":149,"in_reply_to":"3a71b18c_ceb89dca","updated":"2016-12-09 01:01:53.000000000","message":"Done","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"}],"nova/tests/functional/notification_sample_tests/test_flavor.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        }"},{"line_number":51,"context_line":"        # Create a flavor."},{"line_number":52,"context_line":"        self.admin_api.api_post(\u0027flavors\u0027, body)"},{"line_number":53,"context_line":"        self.admin_api.api_delete(\u0027flavors/10\u0027, check_response_status\u003dFalse)"},{"line_number":54,"context_line":"        self._verify_notification("},{"line_number":55,"context_line":"            \u0027flavor-destroy\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_294e7ec1","line":53,"range":{"start_line":53,"start_character":48,"end_line":53,"end_character":75},"updated":"2016-11-30 16:09:52.000000000","message":"Why do you need this?","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        }"},{"line_number":51,"context_line":"        # Create a flavor."},{"line_number":52,"context_line":"        self.admin_api.api_post(\u0027flavors\u0027, body)"},{"line_number":53,"context_line":"        self.admin_api.api_delete(\u0027flavors/10\u0027, check_response_status\u003dFalse)"},{"line_number":54,"context_line":"        self._verify_notification("},{"line_number":55,"context_line":"            \u0027flavor-destroy\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_d4282c88","line":53,"range":{"start_line":53,"start_character":48,"end_line":53,"end_character":75},"in_reply_to":"5a74a57a_294e7ec1","updated":"2016-12-01 02:15:44.000000000","message":"removed.","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self._verify_notification("},{"line_number":55,"context_line":"            \u0027flavor-destroy\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_flavor_save(self):"},{"line_number":58,"context_line":"        body \u003d {"},{"line_number":59,"context_line":"            \"flavor\": {"},{"line_number":60,"context_line":"                \"name\": \"test_flavor\","}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_e9dac6e8","line":57,"range":{"start_line":57,"start_character":20,"end_line":57,"end_character":24},"updated":"2016-11-30 16:09:52.000000000","message":"I think it is more like an \"update\" than a \"save\"","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self._verify_notification("},{"line_number":55,"context_line":"            \u0027flavor-destroy\u0027, actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def test_flavor_save(self):"},{"line_number":58,"context_line":"        body \u003d {"},{"line_number":59,"context_line":"            \"flavor\": {"},{"line_number":60,"context_line":"                \"name\": \"test_flavor\","}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_343a40ce","line":57,"range":{"start_line":57,"start_character":20,"end_line":57,"end_character":24},"in_reply_to":"5a74a57a_e9dac6e8","updated":"2016-12-01 02:15:44.000000000","message":"Done","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"48383e8bb922dbc026acd4176f862f6ed96a0a32","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(TestFlavorNotificationSample, self).setUp()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_flavor_create(self):"},{"line_number":27,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_2ed111fc","line":24,"updated":"2016-12-08 20:52:42.000000000","message":"note that this setUp() is not needed. The default behaviour is to execute the parent\u0027s setUp() method if missing.","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"65eeb9b485a28dbae500d37e84764fa084bd2dba","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        notification_sample_base.NotificationSampleTestBase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(TestFlavorNotificationSample, self).setUp()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_flavor_create(self):"},{"line_number":27,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_c34cee9f","line":24,"in_reply_to":"3a71b18c_2ed111fc","updated":"2016-12-09 01:01:53.000000000","message":"Removed:)","commit_id":"4a2260616f829ab88197a583f4f1a38f86434e98"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_97ef28e8","line":1,"updated":"2016-12-27 19:21:05.000000000","message":"nit: this is different from the copyright in the new flavor.py module in this patch. I\u0027m not sure which is correct. I don\u0027t even think we need the 2016 OpenStack Foundation or \u0027All Rights Reserved\u0027 portions in either header.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_a881c191","line":1,"in_reply_to":"da4df55a_97ef28e8","updated":"2016-12-30 02:46:36.000000000","message":"removed:)","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                \"ram\": 1024,"},{"line_number":28,"context_line":"                \"vcpus\": 2,"},{"line_number":29,"context_line":"                \"disk\": 10,"},{"line_number":30,"context_line":"                \"id\": \"10\","},{"line_number":31,"context_line":"                \"rxtx_factor\": 2.0"},{"line_number":32,"context_line":"            }"},{"line_number":33,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_37b75cf6","line":30,"range":{"start_line":30,"start_character":23,"end_line":30,"end_character":25},"updated":"2016-12-27 19:21:05.000000000","message":"As noted earlier in the samples, I\u0027d rather see the uuid used in the existing samples re-used here for consistency and to re-enforce that this is any string, and by default is a uuid in the code if id isn\u0027t provided when creating the flavor:\n\nhttps://github.com/openstack/nova/blob/d442488ebe19a6b3ddea6ec8668f92c7e2a0a644/nova/compute/flavors.py#L75\n\nAnd to avoid confusion that this might be an internal primary key.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                \"ram\": 1024,"},{"line_number":28,"context_line":"                \"vcpus\": 2,"},{"line_number":29,"context_line":"                \"disk\": 10,"},{"line_number":30,"context_line":"                \"id\": \"10\","},{"line_number":31,"context_line":"                \"rxtx_factor\": 2.0"},{"line_number":32,"context_line":"            }"},{"line_number":33,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_8b107750","line":30,"range":{"start_line":30,"start_character":23,"end_line":30,"end_character":25},"in_reply_to":"da4df55a_37b75cf6","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                \"ram\": 1024,"},{"line_number":42,"context_line":"                \"vcpus\": 2,"},{"line_number":43,"context_line":"                \"disk\": 10,"},{"line_number":44,"context_line":"                \"id\": \"10\","},{"line_number":45,"context_line":"                \"rxtx_factor\": 2.0"},{"line_number":46,"context_line":"            }"},{"line_number":47,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_77cd6484","line":44,"range":{"start_line":44,"start_character":23,"end_line":44,"end_character":25},"updated":"2016-12-27 19:21:05.000000000","message":"same","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                \"ram\": 1024,"},{"line_number":42,"context_line":"                \"vcpus\": 2,"},{"line_number":43,"context_line":"                \"disk\": 10,"},{"line_number":44,"context_line":"                \"id\": \"10\","},{"line_number":45,"context_line":"                \"rxtx_factor\": 2.0"},{"line_number":46,"context_line":"            }"},{"line_number":47,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_885b1d54","line":44,"range":{"start_line":44,"start_character":23,"end_line":44,"end_character":25},"in_reply_to":"da4df55a_77cd6484","updated":"2016-12-30 02:46:36.000000000","message":"Done","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            extra_params\u003d{\u0027networks\u0027: [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":84,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":85,"context_line":"        self._wait_until_deleted(server)"},{"line_number":86,"context_line":"        self.assertEqual(7, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # This list needs to be in order."},{"line_number":89,"context_line":"        expected_notifications \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_c9718ae2","line":86,"updated":"2016-11-30 16:09:52.000000000","message":"I think you can avoid this repetitive changes if you modify _boot_a_server to reset the fake notifier after the flavor for the server is created.","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            extra_params\u003d{\u0027networks\u0027: [{\u0027port\u0027: self.neutron.port_1[\u0027id\u0027]}]})"},{"line_number":84,"context_line":"        self.api.delete_server(server[\u0027id\u0027])"},{"line_number":85,"context_line":"        self._wait_until_deleted(server)"},{"line_number":86,"context_line":"        self.assertEqual(7, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # This list needs to be in order."},{"line_number":89,"context_line":"        expected_notifications \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_74b9182e","line":86,"in_reply_to":"5a74a57a_c9718ae2","updated":"2016-12-01 02:15:44.000000000","message":"Done","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"}],"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":"660ebf763c9d1463079be537571ef25e055bc491","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        elif action \u003d\u003d \"DELETE\":"},{"line_number":40,"context_line":"            flavor_obj.destroy()"},{"line_number":41,"context_line":"            notification \u003d mock_destroy_notification"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            flavor_obj.save()"},{"line_number":44,"context_line":"            notification \u003d mock_notification"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.assertTrue(notification.called)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_f7a794ba","line":44,"range":{"start_line":42,"start_character":8,"end_line":44,"end_character":44},"updated":"2016-12-27 19:21:05.000000000","message":"Seems this should be a ValueError or something in this create/delete patch, and only handles save() in the following UPDATE patch.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"df08b7eb7f90907c83da738658b796301b88b8a3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        elif action \u003d\u003d \"DELETE\":"},{"line_number":40,"context_line":"            flavor_obj.destroy()"},{"line_number":41,"context_line":"            notification \u003d mock_destroy_notification"},{"line_number":42,"context_line":"        else:"},{"line_number":43,"context_line":"            flavor_obj.save()"},{"line_number":44,"context_line":"            notification \u003d mock_notification"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        self.assertTrue(notification.called)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_283b11ed","line":44,"range":{"start_line":42,"start_character":8,"end_line":44,"end_character":44},"in_reply_to":"da4df55a_f7a794ba","updated":"2016-12-30 02:46:36.000000000","message":"removed.","commit_id":"4b953a1ef9e35fc60f5bc22042459778b51d23a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e98b20896004fbb3360e1900b7468cd4d969a445","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        elif action \u003d\u003d \"DELETE\":"},{"line_number":37,"context_line":"            flavor_obj.destroy()"},{"line_number":38,"context_line":"            notification \u003d mock_destroy_notification"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.assertTrue(notification.called)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        event_type \u003d notification.call_args[1][\u0027event_type\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_f29f245d","line":39,"updated":"2016-12-30 22:12:40.000000000","message":"We should probably have an else here that raises an exception otherwise we\u0027re going to get an error on L40 because the notification variable won\u0027t exist.","commit_id":"b74e173d579fbd8620486a1b8234bd4af97919a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0c10c66302d840e43462b508391af6ebcf32d2b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        elif action \u003d\u003d \"DELETE\":"},{"line_number":37,"context_line":"            flavor_obj.destroy()"},{"line_number":38,"context_line":"            notification \u003d mock_destroy_notification"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.assertTrue(notification.called)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        event_type \u003d notification.call_args[1][\u0027event_type\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_124748bc","line":39,"in_reply_to":"ba5201f7_f29f245d","updated":"2016-12-30 22:34:02.000000000","message":"Done","commit_id":"b74e173d579fbd8620486a1b8234bd4af97919a0"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"144b6b1586367ef8f6afbfb596d4c9092d656fd6","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    \u0027NotificationPublisher\u0027: \u00271.0-bbbc1402fb0e443a3eb227cc52b61545\u0027,"},{"line_number":277,"context_line":"    \u0027ServiceStatusNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":278,"context_line":"    \u0027ServiceStatusPayload\u0027: \u00271.0-c43a812046139e875ff2dc5590cd8d02\u0027,"},{"line_number":279,"context_line":"    \u0027FlavorDestroyNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":280,"context_line":"    \u0027FlavorDestroyPayload\u0027: \u00271.0-40f3e8febd6bad9f4a5678c5a7b0cf77\u0027,"},{"line_number":281,"context_line":"    \u0027FlavorNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":282,"context_line":"    \u0027FlavorPayload\u0027: \u00271.1-c39828cd1cda9b53cf3981f8bedb6071\u0027,"},{"line_number":283,"context_line":"}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_0410c94d","line":282,"range":{"start_line":279,"start_character":0,"end_line":282,"end_character":60},"updated":"2016-11-30 16:09:52.000000000","message":"Could you please keep the alphabetical order?","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"85af9b868a482d1543b20a695abc16567a3df6dc","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    \u0027NotificationPublisher\u0027: \u00271.0-bbbc1402fb0e443a3eb227cc52b61545\u0027,"},{"line_number":277,"context_line":"    \u0027ServiceStatusNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":278,"context_line":"    \u0027ServiceStatusPayload\u0027: \u00271.0-c43a812046139e875ff2dc5590cd8d02\u0027,"},{"line_number":279,"context_line":"    \u0027FlavorDestroyNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":280,"context_line":"    \u0027FlavorDestroyPayload\u0027: \u00271.0-40f3e8febd6bad9f4a5678c5a7b0cf77\u0027,"},{"line_number":281,"context_line":"    \u0027FlavorNotification\u0027: \u00271.0-a73147b93b520ff0061865849d3dfa56\u0027,"},{"line_number":282,"context_line":"    \u0027FlavorPayload\u0027: \u00271.1-c39828cd1cda9b53cf3981f8bedb6071\u0027,"},{"line_number":283,"context_line":"}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_948b1468","line":282,"range":{"start_line":279,"start_character":0,"end_line":282,"end_character":60},"in_reply_to":"5a74a57a_0410c94d","updated":"2016-12-01 02:15:44.000000000","message":"Done","commit_id":"735d39e74f04fe75ed6e00c56568bb2474236a98"}]}
