)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"661a9340c58446e33c41abc41f593dc02a230545","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add a readonly \u0027image_meta\u0027 property to the Instance object"},{"line_number":10,"context_line":"which is populated from the system_metadata property contents"},{"line_number":11,"context_line":"via the ImageProps object."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Iddb7b7609eba586eb49c52799a142ae79e5ff1a8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"da85f559_84cfa1af","line":12,"updated":"2015-11-09 15:01:14.000000000","message":"I created blueprint mitaka-objects for tracking general objects work in Mitaka, do we want to make this series a part of that?","commit_id":"1a66224a3d2b2ff618b242b046ac940f80a26cfc"}],"nova/objects/instance.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"42f75a213d8a958b2dbc87fa7d19a9c784663358","unresolved":false,"context_lines":[{"line_number":1197,"context_line":"    # Version 1.17: Instance \u003c\u003d version 1.20"},{"line_number":1198,"context_line":"    # Version 1.18: Instance \u003c\u003d version 1.21"},{"line_number":1199,"context_line":"    # Version 1.19: Erronenous removal of get_hung_in_rebooting(). Reverted."},{"line_number":1200,"context_line":"    VERSION \u003d \u00271.19\u0027"},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"    fields \u003d {"},{"line_number":1203,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Instance\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_06711e76","line":1200,"range":{"start_line":1200,"start_character":17,"end_line":1200,"end_character":19},"updated":"2015-07-27 20:58:53.000000000","message":"This needs to be bumped to hold version 1.22 of Instance","commit_id":"1fc2072eb45e3adf5ad042814a17da3949091e00"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"13d5b875e799135bf5a9cc2813766ebacebb8c06","unresolved":false,"context_lines":[{"line_number":1197,"context_line":"    # Version 1.17: Instance \u003c\u003d version 1.20"},{"line_number":1198,"context_line":"    # Version 1.18: Instance \u003c\u003d version 1.21"},{"line_number":1199,"context_line":"    # Version 1.19: Erronenous removal of get_hung_in_rebooting(). Reverted."},{"line_number":1200,"context_line":"    VERSION \u003d \u00271.19\u0027"},{"line_number":1201,"context_line":""},{"line_number":1202,"context_line":"    fields \u003d {"},{"line_number":1203,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Instance\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_13539b6c","line":1200,"in_reply_to":"3a50d1a3_06711e76","updated":"2015-07-27 22:01:56.000000000","message":"Done","commit_id":"1fc2072eb45e3adf5ad042814a17da3949091e00"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"42f75a213d8a958b2dbc87fa7d19a9c784663358","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        \u00271.16\u0027: \u00271.19\u0027,"},{"line_number":1223,"context_line":"        \u00271.17\u0027: \u00271.20\u0027,"},{"line_number":1224,"context_line":"        \u00271.18\u0027: \u00271.21\u0027,"},{"line_number":1225,"context_line":"        \u00271.19\u0027: \u00271.21\u0027,"},{"line_number":1226,"context_line":"        }"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_26553ac1","line":1225,"updated":"2015-07-27 20:58:53.000000000","message":"Add 1.20: 1.22","commit_id":"1fc2072eb45e3adf5ad042814a17da3949091e00"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"13d5b875e799135bf5a9cc2813766ebacebb8c06","unresolved":false,"context_lines":[{"line_number":1222,"context_line":"        \u00271.16\u0027: \u00271.19\u0027,"},{"line_number":1223,"context_line":"        \u00271.17\u0027: \u00271.20\u0027,"},{"line_number":1224,"context_line":"        \u00271.18\u0027: \u00271.21\u0027,"},{"line_number":1225,"context_line":"        \u00271.19\u0027: \u00271.21\u0027,"},{"line_number":1226,"context_line":"        }"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_d348d3b5","line":1225,"in_reply_to":"3a50d1a3_26553ac1","updated":"2015-07-27 22:01:56.000000000","message":"Done","commit_id":"1fc2072eb45e3adf5ad042814a17da3949091e00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc15c7a490cc0cadd7a8479bf8c774591feb5fc2","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        \u0027new_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":222,"context_line":"        \u0027vcpu_model\u0027: fields.ObjectField(\u0027VirtCPUModel\u0027, nullable\u003dTrue),"},{"line_number":223,"context_line":"        \u0027ec2_ids\u0027: fields.ObjectField(\u0027EC2Ids\u0027),"},{"line_number":224,"context_line":"        \u0027image_meta\u0027: fields.ObjectField(\u0027ImageMeta\u0027),"},{"line_number":225,"context_line":"        }"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a4dcd0f_7b7a8425","line":224,"updated":"2015-08-07 15:45:14.000000000","message":"So, we should only do this if we\u0027re going to persist it separately. Is your plan to eventually get the image meta bits out of system_metadata and persist them as a blob or something?\n\nWhat you have done here constructs the instance.image_meta object from data already stored in the instance. That means that if you touch that attribute and then send this over RPC, you\u0027ll be sending the data twice. Once in system_metadata and again in this field.\n\nIMHO, we should be able to just make image_meta an @property of instance. That way we don\u0027t need to pass it separately over RPC, and we don\u0027t need to bump instance version (since it\u0027s not a remotable thing), which makes this patch smaller and simpler. We could convert it to a proper field later with little trouble if that became somehow desirable.\n\nThoughts?","commit_id":"ecaceea15c2eb34855028fc57b5760b0534d0bfd"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"9d826a8b9209f0fa3beee048920f729b4b577971","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        \u0027new_flavor\u0027: fields.ObjectField(\u0027Flavor\u0027, nullable\u003dTrue),"},{"line_number":222,"context_line":"        \u0027vcpu_model\u0027: fields.ObjectField(\u0027VirtCPUModel\u0027, nullable\u003dTrue),"},{"line_number":223,"context_line":"        \u0027ec2_ids\u0027: fields.ObjectField(\u0027EC2Ids\u0027),"},{"line_number":224,"context_line":"        \u0027image_meta\u0027: fields.ObjectField(\u0027ImageMeta\u0027),"},{"line_number":225,"context_line":"        }"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a4dcd0f_113321f7","line":224,"in_reply_to":"1a4dcd0f_7b7a8425","updated":"2015-08-07 16:14:07.000000000","message":"No, I didn\u0027t have any intention to move it out of system_metadata. I thought that this was just the \"normal\" way to bolt on an external object to provide a different view into the system metadata data, but that\u0027s probably just my ignorance of best practice.\n\nI\u0027m fine doing it as a pure pythjon @property if that\u0027s what is better.","commit_id":"ecaceea15c2eb34855028fc57b5760b0534d0bfd"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ac4ca2eaef77d720ff3c977ad59f504bb44039bd","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    @property"},{"line_number":247,"context_line":"    def image_meta(self):"},{"line_number":248,"context_line":"        return objects.ImageMeta.from_instance(self)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _reset_metadata_tracking(self, fields\u003dNone):"},{"line_number":251,"context_line":"        if fields is None or \u0027system_metadata\u0027 in fields:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a4dcd0f_169512e3","line":248,"updated":"2015-08-10 13:39:11.000000000","message":"Hmm. Well, this is an interesting way of getting around having to increment the version or add a new fields member for the image meta :)","commit_id":"f5a0011b2e0f32c276b8c77732b39176a014f314"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1d8bb248cb2259f2e9aa53ff22076f9d5acdd229","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    @property"},{"line_number":247,"context_line":"    def image_meta(self):"},{"line_number":248,"context_line":"        return objects.ImageMeta.from_instance(self)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def _reset_metadata_tracking(self, fields\u003dNone):"},{"line_number":251,"context_line":"        if fields is None or \u0027system_metadata\u0027 in fields:"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a4dcd0f_5ff16669","line":248,"in_reply_to":"1a4dcd0f_169512e3","updated":"2015-08-10 15:33:32.000000000","message":"Yep, this is what Dan Smith suggested in my previous patch. The rationale is that the ImageMeta object is not ever going to be persisted itself - it is merely providing a different read-only view into the system_metadata table which is the canonical storage for this data. As such, we don\u0027t need the \u0027image_meta\u0027 property to be a versioned object property - it suffices to be a normal python property.","commit_id":"f5a0011b2e0f32c276b8c77732b39176a014f314"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"89131603b3eac841d9895a91c2ea47b23d16e28e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(Instance, self).__init__(*args, **kwargs)"},{"line_number":192,"context_line":"        self._reset_metadata_tracking()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @property"},{"line_number":195,"context_line":"    def image_meta(self):"},{"line_number":196,"context_line":"        return objects.ImageMeta.from_instance(self)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"da85f559_ae65dc45","line":194,"updated":"2015-11-09 16:28:06.000000000","message":"does this not require a version bump?","commit_id":"8668ccfaad87d19efac14b4269a65e732401225e"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"e5739b06a21581b3ec7773f646681a103c014b55","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(Instance, self).__init__(*args, **kwargs)"},{"line_number":192,"context_line":"        self._reset_metadata_tracking()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @property"},{"line_number":195,"context_line":"    def image_meta(self):"},{"line_number":196,"context_line":"        return objects.ImageMeta.from_instance(self)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"da85f559_cfddb943","line":194,"in_reply_to":"da85f559_8974929c","updated":"2015-11-09 17:25:55.000000000","message":"Also this method isn\u0027t remotable, so that is another reason it doesn\u0027t need to be bumped.","commit_id":"8668ccfaad87d19efac14b4269a65e732401225e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8b5dec108ecd2ea217345e873d68ddad7e888f5c","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        super(Instance, self).__init__(*args, **kwargs)"},{"line_number":192,"context_line":"        self._reset_metadata_tracking()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @property"},{"line_number":195,"context_line":"    def image_meta(self):"},{"line_number":196,"context_line":"        return objects.ImageMeta.from_instance(self)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"da85f559_8974929c","line":194,"in_reply_to":"da85f559_ae65dc45","updated":"2015-11-09 16:31:56.000000000","message":"No, we\u0027re ok here. The versioning bump is required when the data associated with an object is changed. In this case we\u0027re not changing any aspect of the Instance object\u0027s image meta datamodel, we\u0027re just providing syntactic sugar for accessing the existing image metadata","commit_id":"8668ccfaad87d19efac14b4269a65e732401225e"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"23bb626b4f7c142619d06ce53a9b282d893043ab","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                                     instance_uuid\u003ddb_inst[\u0027uuid\u0027])"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        db_inst[\u0027system_metadata\u0027] \u003d {"},{"line_number":76,"context_line":"            \u0027image_name\u0027: \u0027os2-warp\u0027,"},{"line_number":77,"context_line":"            \u0027image_min_ram\u0027: 100,"},{"line_number":78,"context_line":"            \u0027image_hw_disk_bus\u0027: \u0027ide\u0027,"},{"line_number":79,"context_line":"            \u0027image_hw_vif_model\u0027: \u0027ne2k_pci\u0027,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba63e191_88a04c92","line":76,"updated":"2016-01-18 20:38:03.000000000","message":"I still have copies of OS/2, some that pre-date warp!","commit_id":"01e31306c13d0d2d51f34999b656d33f2ec7e58b"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"2b7ca35464dab0fccc9c930cd1b0a0feb9ab0c86","unresolved":false,"context_lines":[{"line_number":1171,"context_line":"    \u0027AgentList\u0027: {\u0027Agent\u0027: \u00271.0\u0027},"},{"line_number":1172,"context_line":"    \u0027AggregateList\u0027: {\u0027Aggregate\u0027: \u00271.1\u0027},"},{"line_number":1173,"context_line":"    \u0027BandwidthUsageList\u0027: {\u0027BandwidthUsage\u0027: \u00271.2\u0027},"},{"line_number":1174,"context_line":"    \u0027BlockDeviceMapping\u0027: {\u0027Instance\u0027: \u00271.22\u0027},"},{"line_number":1175,"context_line":"    \u0027BlockDeviceMappingList\u0027: {\u0027BlockDeviceMapping\u0027: \u00271.13\u0027},"},{"line_number":1176,"context_line":"    \u0027ComputeNode\u0027: {\u0027HVSpec\u0027: \u00271.0\u0027, \u0027PciDevicePoolList\u0027: \u00271.1\u0027},"},{"line_number":1177,"context_line":"    \u0027ComputeNodeList\u0027: {\u0027ComputeNode\u0027: \u00271.11\u0027},"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_a56b601d","line":1174,"range":{"start_line":1174,"start_character":42,"end_line":1174,"end_character":44},"updated":"2015-07-28 13:19:30.000000000","message":"With instance being updated to 1.22, you now need to update the BDM object to hold the new version of instance. That will bump the version of BDM so all objects farther down (i.e. BDMList) will need to be bumped also.","commit_id":"aebe3d218f2140de1c2060dad5e7d09e45c5e8cb"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"2b7ca35464dab0fccc9c930cd1b0a0feb9ab0c86","unresolved":false,"context_lines":[{"line_number":1176,"context_line":"    \u0027ComputeNode\u0027: {\u0027HVSpec\u0027: \u00271.0\u0027, \u0027PciDevicePoolList\u0027: \u00271.1\u0027},"},{"line_number":1177,"context_line":"    \u0027ComputeNodeList\u0027: {\u0027ComputeNode\u0027: \u00271.11\u0027},"},{"line_number":1178,"context_line":"    \u0027DNSDomainList\u0027: {\u0027DNSDomain\u0027: \u00271.0\u0027},"},{"line_number":1179,"context_line":"    \u0027FixedIP\u0027: {\u0027Instance\u0027: \u00271.22\u0027, \u0027Network\u0027: \u00271.2\u0027,"},{"line_number":1180,"context_line":"                \u0027VirtualInterface\u0027: \u00271.0\u0027,"},{"line_number":1181,"context_line":"                \u0027FloatingIPList\u0027: \u00271.8\u0027},"},{"line_number":1182,"context_line":"    \u0027FixedIPList\u0027: {\u0027FixedIP\u0027: \u00271.11\u0027},"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_e55ba884","line":1179,"updated":"2015-07-28 13:19:30.000000000","message":"Same here as with BDM.","commit_id":"aebe3d218f2140de1c2060dad5e7d09e45c5e8cb"}]}
