)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"70ccddc2ed5bce3b05ee4e8c7e633a06fb30b552","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch makes the SecurityGroupAPI use the SecurityGroup object"},{"line_number":10,"context_line":"for querying the list of security group names instead of pulling"},{"line_number":11,"context_line":"the instance by id, and then following the [\u0027groups\u0027] link."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This is part of a set aimed at deprecating the instance_get_by_uuid()"},{"line_number":14,"context_line":"method on conductor."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_8736f750","line":11,"updated":"2014-06-02 14:24:11.000000000","message":"nit: technically the security_groups field on the Instance object.","commit_id":"00fbd464c1cb5529f5e68ed5dc1bdf5c80b00c85"}],"nova/compute/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"663f3b326d937433eb4ed914493a799ec78775ea","unresolved":false,"context_lines":[{"line_number":3946,"context_line":"            context, instance_uuid, expected_attrs\u003d[\u0027security_groups\u0027])"},{"line_number":3947,"context_line":"        if instance.security_groups:"},{"line_number":3948,"context_line":"            return [{\u0027name\u0027: group.name} for group in"},{"line_number":3949,"context_line":"                    instance.security_groups]"},{"line_number":3950,"context_line":"        return []"},{"line_number":3951,"context_line":""},{"line_number":3952,"context_line":"    def populate_security_groups(self, instance, security_groups):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5e3b31eb","line":3949,"updated":"2014-05-29 21:33:23.000000000","message":"Not for this particular patch, because I know you\u0027re just trying to get the instance db calls reworked to objects, but it would be better to save a DB call and convert this particular method to something like:\n\n objects.SecurityGroupList.get_by_instance_uuid(...)\n\ninstead of doing a DB query to get the instance, then another query to get the security groups for the instance.","commit_id":"c1250f1bf321fcb9334bb0dd9052f623c9e8546d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"402fad030965bbbadfa8f61e791335a37a7693cb","unresolved":false,"context_lines":[{"line_number":3946,"context_line":"            context, instance_uuid, expected_attrs\u003d[\u0027security_groups\u0027])"},{"line_number":3947,"context_line":"        if instance.security_groups:"},{"line_number":3948,"context_line":"            return [{\u0027name\u0027: group.name} for group in"},{"line_number":3949,"context_line":"                    instance.security_groups]"},{"line_number":3950,"context_line":"        return []"},{"line_number":3951,"context_line":""},{"line_number":3952,"context_line":"    def populate_security_groups(self, instance, security_groups):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_019cee68","line":3949,"in_reply_to":"1ae5cdf2_5e3b31eb","updated":"2014-05-29 21:43:35.000000000","message":"It used to be two calls, now it\u0027s one. Passing expected_attrs will joinedload the securitygroups stuff in the first call so we don\u0027t make a second one.","commit_id":"c1250f1bf321fcb9334bb0dd9052f623c9e8546d"},{"author":{"_account_id":9407,"name":"tan0","email":"tano.tum@gmail.com","username":"tanlin"},"change_message_id":"f554389d00af8ebb00845df49957960372310f22","unresolved":false,"context_lines":[{"line_number":3938,"context_line":"                        context, instance[\u0027host\u0027], instance)"},{"line_number":3939,"context_line":""},{"line_number":3940,"context_line":"    def get_instance_security_groups(self, context, instance_uuid,"},{"line_number":3941,"context_line":"                                     detailed\u003dFalse):"},{"line_number":3942,"context_line":"        if detailed:"},{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ba127856","line":3941,"updated":"2014-05-30 02:52:45.000000000","message":"I mean it is better to put instance \u003d objects.Instance(uuid\u003dinstance_uuid) \ngroups \u003d objects.SecurityGroupList.get_by_instance(context, instance) here, IMHO","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":9407,"name":"tan0","email":"tano.tum@gmail.com","username":"tanlin"},"change_message_id":"1278ab5d9260b8ed08143651eaa0c9acf1dce022","unresolved":false,"context_lines":[{"line_number":3941,"context_line":"                                     detailed\u003dFalse):"},{"line_number":3942,"context_line":"        if detailed:"},{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_a7a42558","line":3944,"updated":"2014-05-30 02:42:53.000000000","message":"Why don\u0027t you make this call objectify at the same time?  It\u0027s exactly the same call in objects.SecurityGroupList.get_by_instance","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1a8db714f11bd70d51093897c19b03d0f8709697","unresolved":false,"context_lines":[{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_443c4494","line":3946,"updated":"2014-05-29 22:08:04.000000000","message":"doesn\u0027t the above result in two DB calls now, instead of the one that used the expected_attrs approach in the first patch?","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9d5548957c84771961b62d9da87062ca6b01544f","unresolved":false,"context_lines":[{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_c4f5b4cc","line":3946,"in_reply_to":"1ae5cdf2_443c4494","updated":"2014-05-29 22:10:38.000000000","message":"Nope, the instance line is just constructing an instance object with the right uuid set for the calling convention required by the securitygrouplist call.","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":9407,"name":"tan0","email":"tano.tum@gmail.com","username":"tanlin"},"change_message_id":"b1e3531a5922ebe3f481f36e46151b2e9fed8009","unresolved":false,"context_lines":[{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"},{"line_number":3950,"context_line":"        if not security_groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_3abae8e1","line":3947,"updated":"2014-05-30 03:16:12.000000000","message":"Like what I did in my old patch: https://review.openstack.org/#/c/59655/\ninstance \u003d instance_obj.Instance(uuid\u003dinstance_uuid)\ngroups \u003d security_group_obj.SecurityGroupList.get_by_instance(\n                       context, instance)\nif detailed:\n        return groups\nreturn [{\u0027name\u0027: group.name} for group in groups]","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"686d1b62c8f14f6a3412e20a61eb3be86bdd9f75","unresolved":false,"context_lines":[{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"},{"line_number":3950,"context_line":"        if not security_groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_cc35c447","line":3947,"in_reply_to":"1ae5cdf2_3abae8e1","updated":"2014-05-30 13:55:54.000000000","message":"Because I haven\u0027t audited the API extension to see if it properly exposes only the fields necessary. Just blindly returning the object here has the potential to introduce a breaking API change if not done carefully.\n\nThe point of this patch was to get us to the point where we could deprecate a conductor method. It wasn\u0027t intended to fully objectify this code.","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3b3d77040200d6b245ee20cc65b513e78688fe6c","unresolved":false,"context_lines":[{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"},{"line_number":3950,"context_line":"        if not security_groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_cc3b04ea","line":3947,"in_reply_to":"1ae5cdf2_cc35c447","updated":"2014-05-30 14:03:55.000000000","message":"Just a suggestion since I\u0027m coming in late, but maybe put \"The point of this patch was to get us to the point where we could deprecate a conductor method. It wasn\u0027t intended to fully objectify this code.\" in the commit message to flesh it out a bit and set expectations for the review?","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7ac44e99819610cb9d42950f6a68bc403ee9bf1c","unresolved":false,"context_lines":[{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""},{"line_number":3949,"context_line":"    def populate_security_groups(self, instance, security_groups):"},{"line_number":3950,"context_line":"        if not security_groups:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_6fee62ee","line":3947,"in_reply_to":"1ae5cdf2_cc3b04ea","updated":"2014-05-30 14:34:12.000000000","message":"Also note that the API side will need to change because the SecurityGroup object does not nest the rules inside it, like the database object does. That brings is further out of the scope of this patch.\n\nYeah, I\u0027ll tweak the commit message.","commit_id":"1d52dd3229a7a3d9b2cebe85b46ba51f69c260c8"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"536a70f4b47b47c160bc49730df403c1dab148c5","unresolved":false,"context_lines":[{"line_number":3942,"context_line":"        if detailed:"},{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_c7a39f9c","line":3945,"updated":"2014-06-02 14:21:40.000000000","message":"This leaves us with a bit of a fake Instance, since only the uuid is set.  It\u0027s fine though because the only place it is used only reads the UUID, and it saves an rpc round-trip and a db query to look up the instance for no good reason.","commit_id":"00fbd464c1cb5529f5e68ed5dc1bdf5c80b00c85"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"70ccddc2ed5bce3b05ee4e8c7e633a06fb30b552","unresolved":false,"context_lines":[{"line_number":3942,"context_line":"        if detailed:"},{"line_number":3943,"context_line":"            return self.db.security_group_get_by_instance(context,"},{"line_number":3944,"context_line":"                                                          instance_uuid)"},{"line_number":3945,"context_line":"        instance \u003d objects.Instance(uuid\u003dinstance_uuid)"},{"line_number":3946,"context_line":"        groups \u003d objects.SecurityGroupList.get_by_instance(context, instance)"},{"line_number":3947,"context_line":"        return [{\u0027name\u0027: group.name} for group in groups]"},{"line_number":3948,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_e7cc1b64","line":3945,"in_reply_to":"1ae5cdf2_c7a39f9c","updated":"2014-06-02 14:24:11.000000000","message":"If it\u0027s confusing (I think Jay was asking the same before), maybe need a simple comment in the code to explain the usage.","commit_id":"00fbd464c1cb5529f5e68ed5dc1bdf5c80b00c85"}]}
