)]}'
{"nova/objects/instance.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0414d2ba38017b7caf466c15495ef270c451da3","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            self.deleted_at \u003d db_inst[\u0027deleted_at\u0027]"},{"line_number":317,"context_line":"            self.obj_reset_changes(fields\u003d[\u0027deleted_at\u0027])"},{"line_number":318,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":319,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FI8c%3D","line":316,"updated":"2013-11-13 22:32:40.000000000","message":"It would be nice to avoid special casing this field if possible.  Did you try the \u0027return cls._from_db_object(context, cls(), db_inst, expected_attrs)\u0027 style of the get_by_* methods above?  That would give the best representation of the instance at this point.","commit_id":"b25b21eb58342e03152ff423b673076a245f64a7"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"49630c378c307824329cab318015ea2e90a9e101","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            self.deleted_at \u003d db_inst[\u0027deleted_at\u0027]"},{"line_number":317,"context_line":"            self.obj_reset_changes(fields\u003d[\u0027deleted_at\u0027])"},{"line_number":318,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":319,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B5sU%3D","line":316,"in_reply_to":"AAAATn%2F%2FFOc%3D","updated":"2013-11-18 19:43:52.000000000","message":"Turns out I had mocked the response with a fake Instance instead of a fake db instance. The latest patch set uses the Instance._from_db_object(...)","commit_id":"b25b21eb58342e03152ff423b673076a245f64a7"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"efb0dcc2c16aaa0f2ca9a88d89b46dbd7f632ef5","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            self.deleted_at \u003d db_inst[\u0027deleted_at\u0027]"},{"line_number":317,"context_line":"            self.obj_reset_changes(fields\u003d[\u0027deleted_at\u0027])"},{"line_number":318,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":319,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FFOc%3D","line":316,"in_reply_to":"AAAATn%2F%2FI50%3D","updated":"2013-11-14 16:42:32.000000000","message":"I\u0027m okay with the special case since it addresses a reported issue.  But it does leave out \u0027deleted\u0027 and \u0027updated_at\u0027, and rather than trying to account for everything it would be nice to just get it all for \u0027free\u0027.  So I\u0027m just trying to understand what\u0027s breaking in order to possibly help.","commit_id":"b25b21eb58342e03152ff423b673076a245f64a7"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"dab1644cac5d30b031ca4b3adb0c703cf25f7a96","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            self.deleted_at \u003d db_inst[\u0027deleted_at\u0027]"},{"line_number":317,"context_line":"            self.obj_reset_changes(fields\u003d[\u0027deleted_at\u0027])"},{"line_number":318,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":319,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FI50%3D","line":316,"in_reply_to":"AAAATn%2F%2FI8c%3D","updated":"2013-11-13 22:46:21.000000000","message":"I did try the cls._from_db_object(...) and it broke tests all over the place. I can give it another go if this special case is unacceptable.","commit_id":"b25b21eb58342e03152ff423b673076a245f64a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"031c272ace2b22ae95f9dcc79bf8bf3160dc266f","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            Instance._from_db_object(context, self, db_inst)"},{"line_number":317,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":318,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":319,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSX4%3D","line":316,"updated":"2013-11-27 20:42:30.000000000","message":"Note that this could end up with self being stale for things like system_metadata, etc. Probably not a concern during delete, but...\n\nAlso, this needs to bump the instance version, otherwise a client with new code that depends on it being refreshed will not fail properly if the other end doesn\u0027t do this.","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"220e1127727161959bdd04047c039d67cd86d862","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            Instance._from_db_object(context, self, db_inst)"},{"line_number":317,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":318,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":319,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F95j4%3D","line":316,"in_reply_to":"AAAATn%2F%2BSPc%3D","updated":"2013-12-04 18:14:09.000000000","message":"Done","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1fe6c6269f38d4820ea04d634b876edbbfb133f4","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            Instance._from_db_object(context, self, db_inst)"},{"line_number":317,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":318,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":319,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSPc%3D","line":316,"in_reply_to":"AAAATn%2F%2BSVM%3D","updated":"2013-11-27 21:12:24.000000000","message":"Right now, yes, that\u0027s all.","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"bdc54e35c53041fd54a2429417e17739a3d5ba8a","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        try:"},{"line_number":314,"context_line":"            db_inst \u003d db.instance_destroy(context, self.uuid,"},{"line_number":315,"context_line":"                                          constraint\u003dconstraint)"},{"line_number":316,"context_line":"            Instance._from_db_object(context, self, db_inst)"},{"line_number":317,"context_line":"        except exception.ConstraintNotMet:"},{"line_number":318,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027destroy\u0027,"},{"line_number":319,"context_line":"                                              reason\u003d\u0027host changed\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSVM%3D","line":316,"in_reply_to":"AAAATn%2F%2BSX4%3D","updated":"2013-11-27 20:56:09.000000000","message":"Is that only bumping the VERSION above to 1.11 and adding a comment or is there something else that needs bumping as well?","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"}],"nova/tests/api/openstack/compute/plugins/v3/test_servers.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0414d2ba38017b7caf466c15495ef270c451da3","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027,"},{"line_number":1151,"context_line":"            fakes.fake_instance_get(launched_at\u003dNone))"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"        def instance_destroy_mock(*args, **kwargs):"},{"line_number":1154,"context_line":"            self.server_delete_called \u003d True"},{"line_number":1155,"context_line":"        self.stubs.Set(db, \u0027instance_destroy\u0027, instance_destroy_mock)"},{"line_number":1156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FI8E%3D","side":"PARENT","line":1153,"updated":"2013-11-13 22:32:40.000000000","message":"Same comment as the other file, this is probably better as a separate patch.  But I\u0027m not going to hold on this.","commit_id":"5ac0475845e1c7ee8cc19b38d37a0af7a3f4c1fa"}],"nova/tests/api/openstack/compute/test_servers.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b0414d2ba38017b7caf466c15495ef270c451da3","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027,"},{"line_number":1320,"context_line":"            fakes.fake_instance_get(launched_at\u003dNone))"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"        def instance_destroy_mock(*args, **kwargs):"},{"line_number":1323,"context_line":"            self.server_delete_called \u003d True"},{"line_number":1324,"context_line":"        self.stubs.Set(db, \u0027instance_destroy\u0027, instance_destroy_mock)"},{"line_number":1325,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FI8Q%3D","side":"PARENT","line":1322,"updated":"2013-11-13 22:32:40.000000000","message":"To be really nitpicky, this would be better as a separate patch.  Because it is affected by changes here I can see the reasoning for it being here.","commit_id":"5ac0475845e1c7ee8cc19b38d37a0af7a3f4c1fa"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"49630c378c307824329cab318015ea2e90a9e101","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027,"},{"line_number":1320,"context_line":"            fakes.fake_instance_get(launched_at\u003dNone))"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"        def instance_destroy_mock(*args, **kwargs):"},{"line_number":1323,"context_line":"            self.server_delete_called \u003d True"},{"line_number":1324,"context_line":"        self.stubs.Set(db, \u0027instance_destroy\u0027, instance_destroy_mock)"},{"line_number":1325,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B5sk%3D","side":"PARENT","line":1322,"in_reply_to":"AAAATn%2F%2FFfY%3D","updated":"2013-11-18 19:43:52.000000000","message":"With the latest patch, I\u0027ve left this in so that it can be removed separately.","commit_id":"5ac0475845e1c7ee8cc19b38d37a0af7a3f4c1fa"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"efb0dcc2c16aaa0f2ca9a88d89b46dbd7f632ef5","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027,"},{"line_number":1320,"context_line":"            fakes.fake_instance_get(launched_at\u003dNone))"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"        def instance_destroy_mock(*args, **kwargs):"},{"line_number":1323,"context_line":"            self.server_delete_called \u003d True"},{"line_number":1324,"context_line":"        self.stubs.Set(db, \u0027instance_destroy\u0027, instance_destroy_mock)"},{"line_number":1325,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FFfY%3D","side":"PARENT","line":1322,"in_reply_to":"AAAATn%2F%2FI7c%3D","updated":"2013-11-14 16:42:32.000000000","message":"I think it should be removed.  I was just suggesting that it makes sense as a separate patch that this one depends on.  But I\u0027m not going to -1 on it.","commit_id":"5ac0475845e1c7ee8cc19b38d37a0af7a3f4c1fa"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"dab1644cac5d30b031ca4b3adb0c703cf25f7a96","unresolved":false,"context_lines":[{"line_number":1319,"context_line":"        self.stubs.Set(db, \u0027instance_get_by_uuid\u0027,"},{"line_number":1320,"context_line":"            fakes.fake_instance_get(launched_at\u003dNone))"},{"line_number":1321,"context_line":""},{"line_number":1322,"context_line":"        def instance_destroy_mock(*args, **kwargs):"},{"line_number":1323,"context_line":"            self.server_delete_called \u003d True"},{"line_number":1324,"context_line":"        self.stubs.Set(db, \u0027instance_destroy\u0027, instance_destroy_mock)"},{"line_number":1325,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FI7c%3D","side":"PARENT","line":1322,"in_reply_to":"AAAATn%2F%2FI8Q%3D","updated":"2013-11-13 22:46:21.000000000","message":"I don\u0027t mind putting this back in, I only removed it as it was duplicating some set up done by the test case\u0027s setUp.","commit_id":"5ac0475845e1c7ee8cc19b38d37a0af7a3f4c1fa"}],"nova/tests/compute/test_compute_api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5e05a5759bc5f10aabf62538814a5a5e0659ce6e","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                        \u0027deleted\u0027: True})"},{"line_number":439,"context_line":"        fake_inst \u003d fake_instance.fake_db_instance(**updates)"},{"line_number":440,"context_line":"        db.instance_destroy(self.context, inst.uuid, constraint\u003dNone)\\"},{"line_number":441,"context_line":"          .AndReturn(fake_inst)"},{"line_number":442,"context_line":"        compute_utils.notify_about_instance_usage("},{"line_number":443,"context_line":"                mox.IgnoreArg(),"},{"line_number":444,"context_line":"                self.context, inst, \u0027%s.end\u0027 % delete_type,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5rg%3D","line":441,"updated":"2013-11-18 19:49:17.000000000","message":"We just had this long thread on-list where everyone said they preferred ( to break a line instead of \\ :)","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"c55932c6098ecdc401ef2f2057cd56b33b1d8fc7","unresolved":false,"context_lines":[{"line_number":438,"context_line":"                        \u0027deleted\u0027: True})"},{"line_number":439,"context_line":"        fake_inst \u003d fake_instance.fake_db_instance(**updates)"},{"line_number":440,"context_line":"        db.instance_destroy(self.context, inst.uuid, constraint\u003dNone)\\"},{"line_number":441,"context_line":"          .AndReturn(fake_inst)"},{"line_number":442,"context_line":"        compute_utils.notify_about_instance_usage("},{"line_number":443,"context_line":"                mox.IgnoreArg(),"},{"line_number":444,"context_line":"                self.context, inst, \u0027%s.end\u0027 % delete_type,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5lc%3D","line":441,"in_reply_to":"AAAATn%2F%2B5rg%3D","updated":"2013-11-18 20:17:02.000000000","message":"Done","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"014e023c30d2302f2b3fc5ef5330781f91793d43","unresolved":false,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        getattr(self.compute_api, delete_type)(self.context, inst)"},{"line_number":556,"context_line":"        for k, v in updates.items():"},{"line_number":557,"context_line":"            self.assertEqual(inst[k], v, \"Mismatch on key: %s\" % k)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_delete(self):"},{"line_number":560,"context_line":"        self._test_delete(\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BS8c%3D","line":557,"updated":"2013-11-27 18:27:40.000000000","message":"This is a nice addition, but is an unrelated change.  Normally this should get split into it\u0027s own patch.","commit_id":"82e6d5a71f0e542befbb31e0ac96637c978bb2c8"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"278d83f3007e441395d874f934a5b205f6001b8a","unresolved":false,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        getattr(self.compute_api, delete_type)(self.context, inst)"},{"line_number":556,"context_line":"        for k, v in updates.items():"},{"line_number":557,"context_line":"            self.assertEqual(inst[k], v, \"Mismatch on key: %s\" % k)"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_delete(self):"},{"line_number":560,"context_line":"        self._test_delete(\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BS2Y%3D","line":557,"in_reply_to":"AAAATn%2F%2BS8c%3D","updated":"2013-11-27 18:59:44.000000000","message":"Done","commit_id":"82e6d5a71f0e542befbb31e0ac96637c978bb2c8"}],"nova/tests/fake_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5e05a5759bc5f10aabf62538814a5a5e0659ce6e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5rM%3D","line":58,"updated":"2013-11-18 19:49:17.000000000","message":"Is this necessary?","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"c55932c6098ecdc401ef2f2057cd56b33b1d8fc7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5p0%3D","line":58,"in_reply_to":"AAAATn%2F%2B5rM%3D","updated":"2013-11-18 20:17:02.000000000","message":"It was breaking things in the two test_servers API tests. Basically, when the fake instance was used to send a notification it needed non-null values to calculate the total storage size. If we\u0027d rather not introduce any more default values here, I can move it to each of the tests, that just duplicates it 4 times.","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"031c272ace2b22ae95f9dcc79bf8bf3160dc266f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSXE%3D","line":58,"updated":"2013-11-27 20:42:30.000000000","message":"Again, why is this only suddenly needed?","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"36e2078e2b9fb6b3953285ba4b8b41930ed2078a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSM8%3D","line":58,"in_reply_to":"AAAATn%2F%2BSPs%3D","updated":"2013-11-27 21:22:03.000000000","message":"The delete tests in the following files:\nnova/tests/api/openstack/compute/test_servers.py\nnova/tests/api/openstack/compute/plugins/v3/test_servers.py\n\nThe mocked instance_destroy functions go from not returning anything to returning fake db instances.","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1fe6c6269f38d4820ea04d634b876edbbfb133f4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSPs%3D","line":58,"in_reply_to":"AAAATn%2F%2BSTI%3D","updated":"2013-11-27 21:12:24.000000000","message":"What I\u0027m asking is, why do these need to be added in this patch? I don\u0027t see anything in this patch (which is about destroy) that needs this. It seems unrelated. What test fails now that didn\u0027t before?","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"bdc54e35c53041fd54a2429417e17739a3d5ba8a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BSTI%3D","line":58,"in_reply_to":"AAAATn%2F%2BSXE%3D","updated":"2013-11-27 20:56:09.000000000","message":"root_gb and ephemeral_gb are added to each other to calculate the total space when the usage notifications are sent. Since the fields are nullable on the Instance, they got initialized as None and thus couldn\u0027t be added together. This is only happening now because we\u0027re updating the Instance object from this faked db instance which used to have root_gb and ephemeral_db set to None... I suppose another option would be to remove the nullable option on those fields in the Instance and set their default to 0. But, I think that\u0027s out of the scope of this bug.","commit_id":"41a0c802947fe3dabf96f1539674535845c6deee"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a000ef618d9f5289d8bab3d1c4ca1dad21c941a3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027metadata\u0027: {},"},{"line_number":56,"context_line":"        \u0027system_metadata\u0027: {},"},{"line_number":57,"context_line":"        \u0027root_gb\u0027: 0,"},{"line_number":58,"context_line":"        \u0027ephemeral_gb\u0027: 0"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    for name, field in instance_obj.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9ymc%3D","line":58,"updated":"2013-12-05 21:30:26.000000000","message":"If Dan is fine with these being here after your explanation then I\u0027m good with the patch.  This could also be split out as a separate change which this patch depends on to keep the changes more conceptually clean.","commit_id":"1167a0f808dd746875be50f31d7ebc56f79d45d6"}],"nova/tests/objects/test_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5e05a5759bc5f10aabf62538814a5a5e0659ce6e","unresolved":false,"context_lines":[{"line_number":661,"context_line":"        fake_inst \u003d fake_instance.fake_db_instance(deleted_at\u003ddeleted_at,"},{"line_number":662,"context_line":"                                                   deleted\u003dTrue)"},{"line_number":663,"context_line":"        db.instance_destroy(self.context, \u0027fake-uuid\u0027, constraint\u003dNone)\\"},{"line_number":664,"context_line":"          .AndReturn(fake_inst)"},{"line_number":665,"context_line":"        self.mox.ReplayAll()"},{"line_number":666,"context_line":"        inst \u003d instance.Instance(id\u003d1, uuid\u003d\u0027fake-uuid\u0027, host\u003d\u0027foo\u0027)"},{"line_number":667,"context_line":"        inst.destroy(self.context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5rI%3D","line":664,"updated":"2013-11-18 19:49:17.000000000","message":"Same.","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"c55932c6098ecdc401ef2f2057cd56b33b1d8fc7","unresolved":false,"context_lines":[{"line_number":661,"context_line":"        fake_inst \u003d fake_instance.fake_db_instance(deleted_at\u003ddeleted_at,"},{"line_number":662,"context_line":"                                                   deleted\u003dTrue)"},{"line_number":663,"context_line":"        db.instance_destroy(self.context, \u0027fake-uuid\u0027, constraint\u003dNone)\\"},{"line_number":664,"context_line":"          .AndReturn(fake_inst)"},{"line_number":665,"context_line":"        self.mox.ReplayAll()"},{"line_number":666,"context_line":"        inst \u003d instance.Instance(id\u003d1, uuid\u003d\u0027fake-uuid\u0027, host\u003d\u0027foo\u0027)"},{"line_number":667,"context_line":"        inst.destroy(self.context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B5lY%3D","line":664,"in_reply_to":"AAAATn%2F%2B5rI%3D","updated":"2013-11-18 20:17:02.000000000","message":"Done","commit_id":"3fc72dcea185b6caa646c10008c67310d96c35fd"}]}
