)]}'
{"nova/objects/instance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282747b0e888f572223c977f39c41d14fa320e13","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra[\u0027flavor\u0027] is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_c344771c","line":453,"updated":"2015-05-13 19:06:51.000000000","message":"Why don\u0027t you need the same hasattr(db_inst, \u0027__dict__\u0027) check here?  You\u0027re passing in db_inst from _from_db_object.","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"286949cfd239895eb4fe58c4334424aa58325d2e","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra[\u0027flavor\u0027] is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_232c7301","line":453,"in_reply_to":"9a0c5dc1_c344771c","updated":"2015-05-13 19:12:04.000000000","message":"Because here we have to force the load if we don\u0027t already have it anyway. The code in _from_db_object() is dependent on whether a thing was requested or not. If I didn\u0027t want to calculate have_extra first, I could have force-loaded it there, but it should already be joined on those cases because extra_attrs would translate to columns_to_join.","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e3a2bd99ec85b1c72ac4ca97288251a2574bec44","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra[\u0027flavor\u0027] is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"},{"line_number":457,"context_line":"                flavors.save_flavor_info(sysmeta, self.flavor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_a02619cc","line":454,"updated":"2015-05-13 19:05:23.000000000","message":"This will raise KeyError if instance_extra is {} and TypeError if instance_extra is None","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282747b0e888f572223c977f39c41d14fa320e13","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra[\u0027flavor\u0027] is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"},{"line_number":457,"context_line":"                flavors.save_flavor_info(sysmeta, self.flavor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_c3e0f7fc","line":454,"updated":"2015-05-13 19:06:51.000000000","message":"Use instance_extra.get(\u0027flavor\u0027) like below?","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"286949cfd239895eb4fe58c4334424aa58325d2e","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra[\u0027flavor\u0027] is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"},{"line_number":457,"context_line":"                flavors.save_flavor_info(sysmeta, self.flavor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_c338f73f","line":454,"in_reply_to":"9a0c5dc1_c3e0f7fc","updated":"2015-05-13 19:12:04.000000000","message":"Yep.","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"282747b0e888f572223c977f39c41d14fa320e13","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                self.system_metadata \u003d sysmeta"},{"line_number":466,"context_line":"        else:"},{"line_number":467,"context_line":"            # Migrate the flavor from system_metadata to extra,"},{"line_number":468,"context_line":"            # if needed"},{"line_number":469,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":470,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":471,"context_line":"                self._flavor_from_db(db_inst[\u0027extra\u0027][\u0027flavor\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_c35b57f5","line":468,"updated":"2015-05-13 19:06:51.000000000","message":"I guess it\u0027s just copying this.","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e3a2bd99ec85b1c72ac4ca97288251a2574bec44","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            # if needed"},{"line_number":469,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":470,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":471,"context_line":"                self._flavor_from_db(db_inst[\u0027extra\u0027][\u0027flavor\u0027])"},{"line_number":472,"context_line":"            elif \u0027instance_type_id\u0027 in self.system_metadata:"},{"line_number":473,"context_line":"                self._migrate_flavor(self)"},{"line_number":474,"context_line":"                migrated_flavor \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_4351a7d7","line":471,"updated":"2015-05-13 19:05:23.000000000","message":"Similar code here","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"314e92cd40a07d9f9a9ac4f0f637249616e5ea52","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            # if needed"},{"line_number":469,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":470,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":471,"context_line":"                self._flavor_from_db(db_inst[\u0027extra\u0027][\u0027flavor\u0027])"},{"line_number":472,"context_line":"            elif \u0027instance_type_id\u0027 in self.system_metadata:"},{"line_number":473,"context_line":"                self._migrate_flavor(self)"},{"line_number":474,"context_line":"                migrated_flavor \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_e3e89b7e","line":471,"in_reply_to":"9a0c5dc1_4351a7d7","updated":"2015-05-13 19:17:45.000000000","message":"I think we\u0027re safe here, because if it\u0027s not None (line above) then we know we can reference all the way through to flavor, right?","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"cb090ddafa0ecd95ee4a7c92611d8c29193e283c","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            # if needed"},{"line_number":469,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":470,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":471,"context_line":"                self._flavor_from_db(db_inst[\u0027extra\u0027][\u0027flavor\u0027])"},{"line_number":472,"context_line":"            elif \u0027instance_type_id\u0027 in self.system_metadata:"},{"line_number":473,"context_line":"                self._migrate_flavor(self)"},{"line_number":474,"context_line":"                migrated_flavor \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_fe9eeeb6","line":471,"in_reply_to":"9a0c5dc1_e3e89b7e","updated":"2015-05-13 19:26:07.000000000","message":"Yes, sorry, I meant this code does the same if you could reuse it","commit_id":"462ab945fc2348966ba9389122d622bcea222f0b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"eff03229e6c1f6ac65e638f91f397e79f6020f83","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_19279cb7","line":453,"updated":"2015-05-13 20:02:19.000000000","message":"Minor nit: could be written more simply as:\n\n   instance_extra \u003d db_inst.get(\u0027extra\u0027, {})\n\nI see the same code is on L469, but IMO using the get() method default parameter is cleaner.","commit_id":"8a052ab38e9bc23e28e399810829b3bc42709f38"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ca155d23727929a5e159248b031c99d4dd19b5e1","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_d9d104cf","line":453,"in_reply_to":"9a0c5dc1_19279cb7","updated":"2015-05-13 20:10:47.000000000","message":"No, it can\u0027t. Because instance[\u0027extra\u0027] can be None, which means .get() won\u0027t return the default and we\u0027ll fail.","commit_id":"8a052ab38e9bc23e28e399810829b3bc42709f38"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"710cec72e8c69667f06d6b4ff097d68ee06ada53","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_a67b267b","line":453,"in_reply_to":"9a0c5dc1_d9d104cf","updated":"2015-05-13 23:00:50.000000000","message":"Ugh, really? Then never mind.","commit_id":"8a052ab38e9bc23e28e399810829b3bc42709f38"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b65afb8a148cde4c79b9bec13ae32dc8f670f4d1","unresolved":false,"context_lines":[{"line_number":450,"context_line":"        if flavor_implied:"},{"line_number":451,"context_line":"            # This instance is from before flavors were migrated out of"},{"line_number":452,"context_line":"            # system_metadata. Make sure that we honor that."},{"line_number":453,"context_line":"            instance_extra \u003d db_inst.get(\u0027extra\u0027) or {}"},{"line_number":454,"context_line":"            if instance_extra.get(\u0027flavor\u0027) is not None:"},{"line_number":455,"context_line":"                self._flavor_from_db(instance_extra[\u0027flavor\u0027])"},{"line_number":456,"context_line":"                sysmeta \u003d self.system_metadata"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_1438839f","line":453,"in_reply_to":"9a0c5dc1_d9d104cf","updated":"2015-05-13 20:23:06.000000000","message":"heh, I just fixed this in https://review.openstack.org/#/c/169517/.","commit_id":"8a052ab38e9bc23e28e399810829b3bc42709f38"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"cec87f5bb0288bf4aa96dedc30d977a020ba4d36","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"                expected_attrs\u003d[\u0027numa_topology\u0027, \u0027pci_requests\u0027, \u0027vcpu_model\u0027,"},{"line_number":1282,"context_line":"                                \u0027flavor\u0027])"},{"line_number":1283,"context_line":"            self.assertTrue(inst.obj_attr_is_set(\u0027numa_topology\u0027))"},{"line_number":1284,"context_line":"            self.assertIsNone(inst.numa_topology)"},{"line_number":1285,"context_line":"            self.assertTrue(inst.obj_attr_is_set(\u0027flavor\u0027))"},{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"    def test_with_null_extra_record(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_8eac5fa1","line":1284,"updated":"2015-05-13 22:06:13.000000000","message":"These two checks should be repeated for pci_requests and vcpu_model.","commit_id":"8a052ab38e9bc23e28e399810829b3bc42709f38"}]}
