)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"01d55cc3675d34d96a1ff4f36c69243a7dc0022a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1c8109ba_8bbea21c","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"updated":"2022-10-05 16:11:21.000000000","message":"while I\u0027m quite OK with the change, I don\u0027t think I agree with this comment. No, we said we shouldn\u0027t just soft-delete new tables unless we need.\nThe word \u0027deprecate\u0027 sends a wrong signal about the fact we could later remove the softdeletion mixin for all the existing tables.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3cb64520c6b391f54448a24af82ca5c077566d2","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"47ef70f7_5fb8d00b","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"1c8109ba_8bbea21c","updated":"2022-10-05 16:21:19.000000000","message":"Agree. We should not be deprecating this, and we should not be prescribing that things like flavor are going to drop this in a future version. We should not be (nor should we ever have been) doing this by default for everything, I agree.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"910a18b4f4d40a9c539cfb6c9c7c41993f2f8c22","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ddc8dc4e_1a201fda","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"34fe48f1_d3cdfaf1","updated":"2022-10-05 19:42:17.000000000","message":"Something like \"not by default\" is what I\u0027d use. Meant to say that specifically in my review, but perhaps I just said it on IRC.\n\nThat spec says \"prefer\" and \"not automatically\" by the way, which is in line with how I think we should treat this. As I said elsewhere, I agree that the splitting makes sense (if there\u0027s a reason, which it sounds like there is) and that we should carefully consider before adding new soft-delete-able things. That\u0027s much different from \"deprecated.\"\n\nSince mitaka I\u0027ve been involved with disaster recovery things that would not have been possible without the forensics provided by the soft delete mechanism that definitely give me a slightly different view of it. One notable event recently specifically has left me scarred such that it\u0027s particularly visible to me.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a404186e1687fbf7edbe65ecc10750250258ea7f","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"caba3a29_54e2dfb9","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"47ef70f7_5fb8d00b","updated":"2022-10-05 17:09:38.000000000","message":"We decided years ago that there would be no more soft delete models in the database [1]. Deprecated does not imply it\u0027s going to be removed. That\u0027s why projects like \u0027oslo_config\u0027 use the term \"deprecated_for_removal\". Every API except 2.latest is deprecated and we\u0027re not going to remove any of those.\n\nPerhaps you could suggest an alternative term?\n\n[1] https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/no-more-soft-delete.html","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9cfd93956989ea34a2fa42e3a39d338a4a780f54","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"34fe48f1_d3cdfaf1","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"caba3a29_54e2dfb9","updated":"2022-10-05 17:24:50.000000000","message":"Please see https://github.com/openstack/nova/commit/0d48617e574. You can find the review here https://review.opendev.org/c/openstack/nova/+/275912\n\nStill open to other words but this internal code and uses terminology we\u0027ve clearly been happy with in the past. If we want red shed instead of black though, that\u0027s okay 🙃","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b3b029a3778ca6bc300fbbe389db9295c74feade","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ccbe19c6_32796a4f","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"ddc8dc4e_1a201fda","updated":"2022-10-06 15:45:33.000000000","message":"Done","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6c74d75ef202cac3cfdffa264d511f1b57ed02d3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e0303e6d_5c89be2d","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"ddc8dc4e_1a201fda","updated":"2022-10-06 10:02:58.000000000","message":"that is very fair i was equally scared by that particalar case and glad we had the soft delete row to try and figure our what was going on even if we did not endup using them in the end to fix things.\n\nover all i would prefer to evenually remove shaddow tables a i dont think they are really that useful. im much more open to keeping soft-deleted db records and or makeing them optional. while i have looked at the soft-deleted rows when debuging custoerm dbs in the past i have never looked a the shodow tables so the (dont add them by default but consider if they would be useful) approch i think is probaly still correct.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b89421e01a512698465ded554430fd545eb5f8fa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: Add NovaSoftDeleteObject mixin"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Soft delete is deprecated and should not be used anymore. The goal of"},{"line_number":10,"context_line":"this patch is to avoid confusion and create new objects without soft"},{"line_number":11,"context_line":"delete. Currently, the NovaPersistentObject mixin includes fields"},{"line_number":12,"context_line":"required by the soft delete feature - deleted and deleted_at - even if"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ee639ed3_8b922c67","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":57},"in_reply_to":"e0303e6d_5c89be2d","updated":"2022-10-06 15:23:46.000000000","message":"+1 on the disaster recovery scenario ... that is why I have always been wary of removing soft-delete altogether. There is only one time that I can recall  that the shadow tables helped me in this case though (records were in the shadow table only). So I\u0027m generally OK with the idea of removing the shadow tables.\n\nAgree that if we do something to remove soft-delete, it should be opt-in, i.e. the operator is choosing explicitly to turn it off with full knowledge of the implications.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"56bba10e560c6fb822d852c89623b78b0e7effac","unresolved":true,"context_lines":[{"line_number":23,"context_line":"presence of separate mixins allows us to do new persistent models"},{"line_number":24,"context_line":"without introducing useless object fields."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"[1] https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/no-more-soft-delete.html"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I0ff6ecac89f282f50f23a6cee2e54740a44d355c"},{"line_number":29,"context_line":"Co-Authored-By: Stephen Finucane \u003cstephenfin@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"049c34f7_1a68211b","line":26,"updated":"2022-10-10 13:59:18.000000000","message":"OK, eventually, I\u0027m good with this explanation.","commit_id":"fab276577a06676d8338111dfb1b69a24d85bdc5"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"839b7637eabf1d6dcf4e95050e9244c954dc1056","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b0adcbc9_8731d360","updated":"2022-08-24 09:35:00.000000000","message":"this is beyond the scope of what you shoudl be doing for the manila share feature.\n\ninstead of doing this introduce a new base classes that does not have the delete and deleted_at fields and use that as the base of the share mapping object.","commit_id":"803df7f2eae4fd2fec9a7bc146dc0ec44acdf28f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a767bf36_054f1dd4","updated":"2022-09-30 09:29:22.000000000","message":"Couple of small things. But overall looks OK","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3cb64520c6b391f54448a24af82ca5c077566d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8857e89d_817a286d","updated":"2022-10-05 16:21:19.000000000","message":"I\u0027d like to know more about the motivation here. Is there a blueprint or spec that documents what we\u0027re trying to accomplish here?\n\nThat said, the splitting of timestamp and soft-deletable is fine to make it easier to take one without the other, although it seems like a lot of churn for minimal gain if there\u0027s no overarching thing we\u0027re trying to accomplish here.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f316682fed565ce37180691136d3af15cecf816","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"31e4f7ea_d67a95e0","in_reply_to":"5f923c6f_3ffa4e7d","updated":"2022-10-05 18:45:32.000000000","message":"Ack, since this was not attached to any other effort, I assumed this was \"gardening\" and not \"I need this for my feature\". Makes sense.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f657e25f1eef5ed38dac00e0e17778b0e1d4a7d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5f923c6f_3ffa4e7d","in_reply_to":"8857e89d_817a286d","updated":"2022-10-05 17:29:38.000000000","message":"there are two uggla started this patch to figure out how to add the manila share model without addign soft delete to them.\nso this was ment to only affect the new manilla share feature.\n\nuggla orginal attempet touched more things then it needed too.\n\nstephn has not modifed it more i guess in relation to \nhttps://review.opendev.org/c/openstack/nova/+/860401\n\ni dont think we shoudl be conflating the do this was ment to just intoduce a basecase that did not have the soft delete mixing","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"56bba10e560c6fb822d852c89623b78b0e7effac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"96caa8e4_f942fd38","updated":"2022-10-10 13:59:18.000000000","message":"+1 because I\u0027d prefer we would change the comment in objects.base before merging this change.\nThat said, I\u0027m eventually OK with this change.","commit_id":"fab276577a06676d8338111dfb1b69a24d85bdc5"}],"nova/objects/aggregate.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":229,"context_line":"class Aggregate(base.NovaPersistentSoftDeleteObject, base.NovaObject):"},{"line_number":230,"context_line":"    # Version 1.0: Initial version"},{"line_number":231,"context_line":"    # Version 1.1: String attributes updated to support unicode"},{"line_number":232,"context_line":"    # Version 1.2: Added uuid field"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc7158c4_836f34af","line":229,"updated":"2022-09-30 09:29:22.000000000","message":"Please add a note that this can be removed when we bump Aggregate to 2.0 as we don\u0027t actually implement soft delete for Aggregate ovo.","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":229,"context_line":"class Aggregate(base.NovaPersistentSoftDeleteObject, base.NovaObject):"},{"line_number":230,"context_line":"    # Version 1.0: Initial version"},{"line_number":231,"context_line":"    # Version 1.1: String attributes updated to support unicode"},{"line_number":232,"context_line":"    # Version 1.2: Added uuid field"}],"source_content_type":"text/x-python","patch_set":3,"id":"0edc045c_1db8bd33","line":229,"in_reply_to":"cc7158c4_836f34af","updated":"2022-10-05 08:10:36.000000000","message":"Done","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3cb64520c6b391f54448a24af82ca5c077566d2","unresolved":true,"context_lines":[{"line_number":231,"context_line":"    base.NovaPersistentObject,"},{"line_number":232,"context_line":"    base.NovaSoftDeleteObject,"},{"line_number":233,"context_line":"    base.NovaObject,"},{"line_number":234,"context_line":"):"},{"line_number":235,"context_line":"    # Version 1.0: Initial version"},{"line_number":236,"context_line":"    # Version 1.1: String attributes updated to support unicode"},{"line_number":237,"context_line":"    # Version 1.2: Added uuid field"}],"source_content_type":"text/x-python","patch_set":5,"id":"4b451939_9ffa9453","line":234,"updated":"2022-10-05 16:21:19.000000000","message":"I definitely do not appreciate this reformatting in general, but definitely not in this patch, which just increases the line hit for every one of these. Uggla\u0027s initial version didn\u0027t do this and I don\u0027t think we should here either.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a404186e1687fbf7edbe65ecc10750250258ea7f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    base.NovaPersistentObject,"},{"line_number":232,"context_line":"    base.NovaSoftDeleteObject,"},{"line_number":233,"context_line":"    base.NovaObject,"},{"line_number":234,"context_line":"):"},{"line_number":235,"context_line":"    # Version 1.0: Initial version"},{"line_number":236,"context_line":"    # Version 1.1: String attributes updated to support unicode"},{"line_number":237,"context_line":"    # Version 1.2: Added uuid field"}],"source_content_type":"text/x-python","patch_set":5,"id":"f7fbaf43_6a483ed9","line":234,"in_reply_to":"4b451939_9ffa9453","updated":"2022-10-05 17:09:38.000000000","message":"In the initial version we didn\u0027t have separate mixins so there was no issue with fitting this. That\u0027s no longer the case now so we need to wrap. This is a perfectly fine way to wrap and helps elsewhere for things like type hints. Also, I don\u0027t -1 your patches on style concerns. I\u0027d appreciate it if you extended me the same courtesy.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"910a18b4f4d40a9c539cfb6c9c7c41993f2f8c22","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    base.NovaPersistentObject,"},{"line_number":232,"context_line":"    base.NovaSoftDeleteObject,"},{"line_number":233,"context_line":"    base.NovaObject,"},{"line_number":234,"context_line":"):"},{"line_number":235,"context_line":"    # Version 1.0: Initial version"},{"line_number":236,"context_line":"    # Version 1.1: String attributes updated to support unicode"},{"line_number":237,"context_line":"    # Version 1.2: Added uuid field"}],"source_content_type":"text/x-python","patch_set":5,"id":"9618b3c7_e24c0fcc","line":234,"in_reply_to":"f7fbaf43_6a483ed9","updated":"2022-10-05 19:42:17.000000000","message":"Isn\u0027t the point of you (let\u0027s be honest) trying to push black syntax in here because \"style matters\" for consistency?\n\nThat said, I\u0027ve always commented for style issues, as have many people and we have a whole package that tries to enforce some amount of style. So I think I\u0027m on stable ground there. I didn\u0027t -1 specifically for the style stuff, nor have I stuck to it hard and fast on other things I\u0027ve approved with style stuff like this. I said \"do not appreciate\" and I meant it and certainly won\u0027t block this because of it.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"}],"nova/objects/base.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d0bf067a2aac3dfc51ae0910615f11adeacba20","unresolved":true,"context_lines":[{"line_number":131,"context_line":"            self._context \u003d original_context"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class NovaPersistentObject(object):"},{"line_number":135,"context_line":"    \"\"\"Mixin class for persistent objects."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    This adds the fields that we use in common for most persistent objects."}],"source_content_type":"text/x-python","patch_set":2,"id":"9ec13bb3_69b2d81a","line":134,"updated":"2022-08-24 13:14:43.000000000","message":"interestingly it is the same as oslo_versionedobjects.base.TimestampedObject so we can use that directly","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2f6109d2e2ff39be54b8567a127f4b34d8e39e2","unresolved":true,"context_lines":[{"line_number":131,"context_line":"            self._context \u003d original_context"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class NovaPersistentObject(object):"},{"line_number":135,"context_line":"    \"\"\"Mixin class for persistent objects."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    This adds the fields that we use in common for most persistent objects."}],"source_content_type":"text/x-python","patch_set":2,"id":"d8364932_ed89fbc8","line":134,"in_reply_to":"6044927a_e12e93b7","updated":"2022-08-26 07:50:44.000000000","message":"We can agree to disagree :). I can offer a compromise. We can alias the ovo mixin class here i.e.:\n\nNovaPersistentObject \u003d oslo_versionedobjects.base.TimestampedObject\n\nthat creates a project local name but does not duplicate the implementation.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"039d4d86b91c16bbe626aafcf12a4e0e998c45b6","unresolved":true,"context_lines":[{"line_number":131,"context_line":"            self._context \u003d original_context"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class NovaPersistentObject(object):"},{"line_number":135,"context_line":"    \"\"\"Mixin class for persistent objects."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    This adds the fields that we use in common for most persistent objects."}],"source_content_type":"text/x-python","patch_set":2,"id":"6044927a_e12e93b7","line":134,"in_reply_to":"9ec13bb3_69b2d81a","updated":"2022-08-24 15:05:48.000000000","message":"In my opinion, despite it is a duplicate I would keep this one in Nova. It remains in one project and I think it is easier to find and use it.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a914b17a019ee9baf47366a5bd1bf1b03b2d1c1f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            self._context \u003d original_context"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"class NovaPersistentObject(object):"},{"line_number":135,"context_line":"    \"\"\"Mixin class for persistent objects."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    This adds the fields that we use in common for most persistent objects."}],"source_content_type":"text/x-python","patch_set":2,"id":"5d88df8c_0a1b5a9b","line":134,"in_reply_to":"d8364932_ed89fbc8","updated":"2022-09-30 09:13:55.000000000","message":"Sounds like good compromise.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d0bf067a2aac3dfc51ae0910615f11adeacba20","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    \"\"\""},{"line_number":154,"context_line":"    fields \u003d {"},{"line_number":155,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":156,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":157,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":158,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae941378_3e388141","line":156,"updated":"2022-08-24 13:14:43.000000000","message":"wondering if we need to actually repeat these two fields that are also in the base class","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2f6109d2e2ff39be54b8567a127f4b34d8e39e2","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    \"\"\""},{"line_number":154,"context_line":"    fields \u003d {"},{"line_number":155,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":156,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":157,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":158,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f297870_d7203167","line":156,"in_reply_to":"2883a3cd_f4e867c1","updated":"2022-08-26 07:50:44.000000000","message":"if we can drop it then I would drop it to avoid duplication","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a914b17a019ee9baf47366a5bd1bf1b03b2d1c1f","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    \"\"\""},{"line_number":154,"context_line":"    fields \u003d {"},{"line_number":155,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":156,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":157,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":158,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"7e33ccf5_01842fde","line":156,"in_reply_to":"8f297870_d7203167","updated":"2022-09-30 09:13:55.000000000","message":"Done","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"039d4d86b91c16bbe626aafcf12a4e0e998c45b6","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    \"\"\""},{"line_number":154,"context_line":"    fields \u003d {"},{"line_number":155,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":156,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":157,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":158,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":159,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"2883a3cd_f4e867c1","line":156,"in_reply_to":"ae941378_3e388141","updated":"2022-08-24 15:05:48.000000000","message":"It was the original code. So I don\u0027t change it.\nI have no real opinion on that one, tell me what you prefer.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"# Create an alias of the ovo mixin."},{"line_number":134,"context_line":"# NovaPersistentObject must be used for common persistant objects."},{"line_number":135,"context_line":"NovaPersistentObject \u003d ovoo_base.TimestampedObject"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"f0eee156_9da2c4a8","line":134,"range":{"start_line":134,"start_character":47,"end_line":134,"end_character":57},"updated":"2022-09-30 09:29:22.000000000","message":"nit: persistent","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"# Create an alias of the ovo mixin."},{"line_number":134,"context_line":"# NovaPersistentObject must be used for common persistant objects."},{"line_number":135,"context_line":"NovaPersistentObject \u003d ovoo_base.TimestampedObject"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ce7f975e_7428eeb3","line":134,"range":{"start_line":134,"start_character":47,"end_line":134,"end_character":57},"in_reply_to":"f0eee156_9da2c4a8","updated":"2022-10-05 08:10:36.000000000","message":"Done","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"d8b49530_fa34aacf","line":149,"updated":"2022-09-30 09:29:22.000000000","message":"Can we drop these now from here and let it come from the base class?","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"98170cd285a46cc0bc5f9a0041180665429d82f9","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"c498c225_6bef1d61","line":149,"in_reply_to":"1a3c4c17_755734f4","updated":"2022-10-05 15:34:33.000000000","message":"We use mro() for this [1]. However, you\u0027ll note that we don\u0027t go more than one level deep (i.e. we don\u0027t call mro() recursively) so you can\u0027t have subclasses of subclasses.\n\nRather than having a NovaPersistentObject and a NovaPersistentSoftDeleteObject subclass, could we have two mixins: NovaPersistentObject and NovaSoftDeleteObject. Anything that currently subclasses NovaPersistentObject will now have to subclass from both, but in a future object version we can remove the NovaSoftDeleteObject.\n\nI\u0027ll push a new revision of this to demo this shortly.\n\n[1] https://github.com/openstack/oslo.versionedobjects/blob/b4ea8348085a3d9725b4a0d497b937deb2d759ac/oslo_versionedobjects/base.py#L46-L96","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d4ff334898e5503972efe50dbe5db09d9e91169","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"90af2431_172f699f","line":149,"in_reply_to":"1a3c4c17_755734f4","updated":"2022-10-05 15:08:53.000000000","message":"Well, technically Nova\u0027s internal contract is between our objects and our DB schema, so basing our object on something provided by a library could be more likely to be unstable than not. I don\u0027t expect those to change, but if the library was bumped to 2.0 and some of these fields changed to DateTimeUTCField or something, Nova\u0027s RPC (at least) would break. Hopefully we\u0027d detect that with our hash change, but then we\u0027d have to drop the inheritance to fix it.\n\nAnyway, I agree this *should* work. uggla can you tell me what \"problems in initializing the class properly\" means?","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"90730ecb520b41d974a8d64c7f7cd0bb0f56356c","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a3c4c17_755734f4","line":149,"in_reply_to":"29dabef0_d0dcfd2e","updated":"2022-10-05 10:05:05.000000000","message":"We need to track this down as without it I can imagine that we have divergent field definition for created_at in NovaPersistentSoftDeleteObject and in NovaPersistentObject.\n\nThis somehow related to how the ovo base class handles the fields dict. I think we should be able to get field definitions from different base classes but it seems we don\u0027t get them. I guess you are also tripped on the test case nova.tests.unit.objects.test_objects.TestObject.test_object_inheritance failing if you drop created_at here. \n\n@Dan: Maybe you have some idea from ovo perspective if what we want here is even possible with ovo.","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"81c045f81cb63223c0565e7d22f301958d26169f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"e8c1e2f4_579586d5","line":149,"in_reply_to":"c498c225_6bef1d61","updated":"2022-10-05 17:51:17.000000000","message":"Thank you Stephen to figuring out the missing piece, the one level mro thing. I had no brain power to dig out that.","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    \"\"\""},{"line_number":147,"context_line":"    fields \u003d {"},{"line_number":148,"context_line":"        \u0027created_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":149,"context_line":"        \u0027updated_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":150,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"},{"line_number":151,"context_line":"        \u0027deleted\u0027: obj_fields.BooleanField(default\u003dFalse),"},{"line_number":152,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"29dabef0_d0dcfd2e","line":149,"in_reply_to":"d8b49530_fa34aacf","updated":"2022-10-05 08:10:36.000000000","message":"Unfortunately, I tried to add only the required missing fields, but it went into problems in initializing the class properly. Maybe I miss something?","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":155,"context_line":"#              a release. Do not use it directly or modify it."},{"line_number":156,"context_line":"# TODO(danms): Remove this when we can get it from oslo.versionedobjects"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"class EphemeralObject(object):"},{"line_number":160,"context_line":"    \"\"\"Mix-in to provide more recognizable field defaulting."},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"b8d37e7a_0ec1bc89","line":158,"updated":"2022-09-30 09:29:22.000000000","message":"These are unnecessary empty lines. The two comment belongs to EphemeralObject so keep it on top of it.","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":false,"context_lines":[{"line_number":155,"context_line":"#              a release. Do not use it directly or modify it."},{"line_number":156,"context_line":"# TODO(danms): Remove this when we can get it from oslo.versionedobjects"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"class EphemeralObject(object):"},{"line_number":160,"context_line":"    \"\"\"Mix-in to provide more recognizable field defaulting."},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"820ed748_c450f4ea","line":158,"in_reply_to":"b8d37e7a_0ec1bc89","updated":"2022-10-05 08:10:36.000000000","message":"Done","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f809576923b95174bb758bde577b82e998fabead","unresolved":true,"context_lines":[{"line_number":94,"context_line":"remotable \u003d ovoo_base.remotable"},{"line_number":95,"context_line":"obj_make_list \u003d ovoo_base.obj_make_list"},{"line_number":96,"context_line":"NovaObjectDictCompat \u003d ovoo_base.VersionedObjectDictCompat"},{"line_number":97,"context_line":"NovaTimestampObject \u003d ovoo_base.TimestampedObject"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class NovaObject(ovoo_base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"65716770_28722c0f","side":"PARENT","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":49},"updated":"2022-10-05 17:42:39.000000000","message":"so to summerise what  i said on irc just now.\n\ni think we shoudl abandon this as part of the manilla share seriese (\npossibel by giving this to stephen to work on seperatly.)\n\nand for manilly just make your new share object inherit form NovaTimestampObject\n\n\nwe can decised if we want to have the soft delete be part of a mixin and or clean up the other objects seperate possibel in this patch but i would remove this from the deps for manilla share for now.","commit_id":"ce15e7fa68081490b488b05baac78ff3e326f019"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d40b34b73ff646317dacbd7c945183b55ee3513b","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    This adds the fields that we use in common for most soft delete objects."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    Soft delete is a deprecated feature and should not be used for future"},{"line_number":144,"context_line":"    objects."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":"    fields \u003d {"},{"line_number":147,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"56a997ee_cb7b5650","line":144,"updated":"2022-10-05 16:14:34.000000000","message":"Well, I don\u0027t like this sentence.\n\nAlso, I don\u0027t see the need for having a separate mixin, couldn\u0027t we just go back to PS4 ?","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9cfd93956989ea34a2fa42e3a39d338a4a780f54","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    This adds the fields that we use in common for most soft delete objects."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    Soft delete is a deprecated feature and should not be used for future"},{"line_number":144,"context_line":"    objects."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":"    fields \u003d {"},{"line_number":147,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ef85171f_04700783","line":144,"in_reply_to":"528f81b1_519d898c","updated":"2022-10-05 17:24:50.000000000","message":"Done","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a404186e1687fbf7edbe65ecc10750250258ea7f","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    This adds the fields that we use in common for most soft delete objects."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    Soft delete is a deprecated feature and should not be used for future"},{"line_number":144,"context_line":"    objects."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":"    fields \u003d {"},{"line_number":147,"context_line":"        \u0027deleted_at\u0027: obj_fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"528f81b1_519d898c","line":144,"in_reply_to":"56a997ee_cb7b5650","updated":"2022-10-05 17:09:38.000000000","message":"\u003e Well, I don\u0027t like this sentence.\n\nPer the commit message it\u0027s perfectly true. Perhaps there\u0027s another word that would imply the same thing (we don\u0027t want to use this anymore).\n\n\u003e Also, I don\u0027t see the need for having a separate mixin, couldn\u0027t we just go back to PS4 ?\n\nPlease see my comments on PS4. o.vo mixins can\u0027t be subclassed. You\u0027d need to define multiple composite classes. The mixin pattern is a reasonable one to use here.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"56bba10e560c6fb822d852c89623b78b0e7effac","unresolved":true,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    This adds the fields that we use in common for most soft delete objects."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    Soft delete is a legacy feature and this mixin should not be used for new"},{"line_number":144,"context_line":"    objects."},{"line_number":145,"context_line":"    \"\"\""},{"line_number":146,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"75bbdd72_8d29b979","line":143,"range":{"start_line":143,"start_character":21,"end_line":143,"end_character":35},"updated":"2022-10-10 13:59:18.000000000","message":"mmm, not really. You explained it better with the commit msg.\nCan you also do this here ?","commit_id":"fab276577a06676d8338111dfb1b69a24d85bdc5"}],"nova/objects/build_request.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5d0bf067a2aac3dfc51ae0910615f11adeacba20","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        # NOTE(alaski): Normally these would come from the"},{"line_number":47,"context_line":"        # NovaPersistentSoftDeleteObject mixin but they\u0027re being set"},{"line_number":48,"context_line":"        # explicitly because we only need created_at/updated_at."},{"line_number":49,"context_line":"        # There is no soft delete for this object."},{"line_number":50,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"03ec30d0_85c2971e","line":49,"updated":"2022-08-24 13:14:43.000000000","message":"I think you can simply inherit from NovaPersistentObject and drop created_at and updated_at from this definition","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a914b17a019ee9baf47366a5bd1bf1b03b2d1c1f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # NOTE(alaski): Normally these would come from the"},{"line_number":47,"context_line":"        # NovaPersistentSoftDeleteObject mixin but they\u0027re being set"},{"line_number":48,"context_line":"        # explicitly because we only need created_at/updated_at."},{"line_number":49,"context_line":"        # There is no soft delete for this object."},{"line_number":50,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3747b7cf_9dae0455","line":49,"in_reply_to":"02e0ea2f_92b5a802","updated":"2022-09-30 09:13:55.000000000","message":"ok good to me.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"039d4d86b91c16bbe626aafcf12a4e0e998c45b6","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        # NOTE(alaski): Normally these would come from the"},{"line_number":47,"context_line":"        # NovaPersistentSoftDeleteObject mixin but they\u0027re being set"},{"line_number":48,"context_line":"        # explicitly because we only need created_at/updated_at."},{"line_number":49,"context_line":"        # There is no soft delete for this object."},{"line_number":50,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"e4506d32_f52a8148","line":49,"in_reply_to":"03ec30d0_85c2971e","updated":"2022-08-24 15:05:48.000000000","message":"There are different implementations of objects that do not need soft delete.\nAnd it was part of what I wanted to do initially --\u003e Clean all these objects and inherit them from the new NovaPersistentObject and have them use a similar pattern.\nBut trying to do it on aggregate shows that it has a lot of impacts (mostly API).\n\nSo based on our discussion, I understood that we should keep this patch as less intrusive as possible and don\u0027t touch objects (also note that changing objects will change sha checksum). Then address the object changes in a separate patch series with a spec discussed at the PTG.\n\nSo I would keep this as is. Please tell me if you disagree.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b2f6109d2e2ff39be54b8567a127f4b34d8e39e2","unresolved":true,"context_lines":[{"line_number":46,"context_line":"        # NOTE(alaski): Normally these would come from the"},{"line_number":47,"context_line":"        # NovaPersistentSoftDeleteObject mixin but they\u0027re being set"},{"line_number":48,"context_line":"        # explicitly because we only need created_at/updated_at."},{"line_number":49,"context_line":"        # There is no soft delete for this object."},{"line_number":50,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027tags\u0027: fields.ObjectField(\u0027TagList\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"02e0ea2f_92b5a802","line":49,"in_reply_to":"e4506d32_f52a8148","updated":"2022-08-26 07:50:44.000000000","message":"We can take this change class by class.\n1) for those classes where the mixin class change can be done without API or object version impact we should simply do the change here. BuildRequest is a good example for it. It does not have a field to be deleted as it only declares created_at and updated_at. Those fields just moves from here to the new mixin class. So from outside perspective the class offers the same fields. I think the hash will not change either.\n2) for those classes where delete_at is defined today but not needed / used we cannot drop the field without ovo version and API changes. So we should not do that here. Aggregates seems to be an example for this case.","commit_id":"1164d045dffdb139febdda773af4e795879deae4"}],"nova/objects/flavor.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(mriedem): Remove NovaPersistentSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor(base.NovaPersistentSoftDeleteObject, base.NovaObject,"},{"line_number":199,"context_line":"             base.NovaObjectDictCompat):"}],"source_content_type":"text/x-python","patch_set":3,"id":"6668fad8_0f258dc1","line":196,"updated":"2022-09-30 09:29:22.000000000","message":"Replace NovaPersistentSoftDeleteObject with NovaPersistentObject in version 2.0","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(mriedem): Remove NovaPersistentSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor(base.NovaPersistentSoftDeleteObject, base.NovaObject,"},{"line_number":199,"context_line":"             base.NovaObjectDictCompat):"}],"source_content_type":"text/x-python","patch_set":3,"id":"c6e53e13_721b7c08","line":196,"in_reply_to":"6668fad8_0f258dc1","updated":"2022-10-05 08:10:36.000000000","message":"Done","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3cb64520c6b391f54448a24af82ca5c077566d2","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"2559e891_a50ae54f","line":196,"updated":"2022-10-05 16:21:19.000000000","message":"Why? Flavors were supposed to be always resolvable because links to them were in the bodies of the instances.\n\nIs there some blueprint or other effort documenting why we would want to do this? For things like Aggregate, I could be convinced I guess, although I don\u0027t see the real need to make that change. But Flavors? I don\u0027t get why this todo is here.\n\nCan you explain why some of these have this todo and not others?","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a404186e1687fbf7edbe65ecc10750250258ea7f","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"52ab7a0b_0a1cda2d","line":196,"in_reply_to":"2559e891_a50ae54f","updated":"2022-10-05 17:09:38.000000000","message":"I think this is a mistake I made reworking this. mriedem\u0027s comment should have been left as it was. Will fix.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b3b029a3778ca6bc300fbbe389db9295c74feade","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5cd6f19e_e20acc91","line":196,"in_reply_to":"3e348596_f998c47a","updated":"2022-10-06 15:45:33.000000000","message":"Done","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ad598971173eba9c29fc821fea63d1a0ee11b87f","unresolved":true,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a0681c22_2a6e093d","line":196,"in_reply_to":"52ab7a0b_0a1cda2d","updated":"2022-10-05 17:25:25.000000000","message":"the instance have the flavor.original_name in addtion to the links and and we embded the flavor so that the info can be retrived even if the flavor is fully deleted.\n\ntoday even with soft delete you cannot guarentee that the flavor links in teh instace will work sicne you can archive it and then purge it you cant rely on it.\n\nthe falvor name and embeded properties liek the extra specs howver you can rely on.\n\nso i dont really see that asa change in the contract.\n\nit changes the timing of when the link is invalidate to wehn teh falvor is deleted instead of wehn the archive delete rows command runs but as an end user you cant tell the deifference just form the api.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70f4e987db4136d01e07aa8471e4552b3188109b","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"de54a40f_580e373c","line":196,"in_reply_to":"a0681c22_2a6e093d","updated":"2022-10-05 17:32:34.000000000","message":"There\u0027s no such thing as soft-delete for flavors any more. We moved flavors to the API database years ago. Let me know if the updated comment makes sense.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f316682fed565ce37180691136d3af15cecf816","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":196,"context_line":"# TODO(Uggla): Remove NovaSoftDeleteObject in version 2.0"},{"line_number":197,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":198,"context_line":"class Flavor("},{"line_number":199,"context_line":"    base.NovaPersistentObject,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3e348596_f998c47a","line":196,"in_reply_to":"de54a40f_580e373c","updated":"2022-10-05 18:45:32.000000000","message":"Okay I thought we had specifically added it back in for Flavor when we moved, so fair enough. That means the TODO comment should be \"This is no longer on the DB model, so we should remove it from the object/rpc interface in v2.0\". I\u0027m definitely guilty of looking at our objects and assuming those are our DB models because they\u0027re easier :)","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"}],"nova/objects/instance_group.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e942df71966909b2ffb696435e1c5b15c464e1f1","unresolved":true,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":106,"context_line":"# TODO(mriedem): Replace NovaPersistentSoftDeleteObject with TimestampedObject"},{"line_number":107,"context_line":"# in v2.0."},{"line_number":108,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":109,"context_line":"class InstanceGroup(base.NovaPersistentSoftDeleteObject, base.NovaObject,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3e8cc717_e7456ed5","line":106,"updated":"2022-09-30 09:29:22.000000000","message":"replase NovaPersistentSoftDeleteObject with NovaPersistentObject in v2.0","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"05e3723679517739104cb510b3e26595acb2e824","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":106,"context_line":"# TODO(mriedem): Replace NovaPersistentSoftDeleteObject with TimestampedObject"},{"line_number":107,"context_line":"# in v2.0."},{"line_number":108,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":109,"context_line":"class InstanceGroup(base.NovaPersistentSoftDeleteObject, base.NovaObject,"}],"source_content_type":"text/x-python","patch_set":3,"id":"b920a6a5_ebc55751","line":106,"in_reply_to":"3e8cc717_e7456ed5","updated":"2022-10-05 08:10:36.000000000","message":"Done","commit_id":"f76fa7cb2d80954e83c731ab77d274052b4cece6"}],"nova/objects/task_log.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f3cb64520c6b391f54448a24af82ca5c077566d2","unresolved":true,"context_lines":[{"line_number":34,"context_line":"        \u0027message\u0027: fields.StringField(),"},{"line_number":35,"context_line":"        \u0027task_items\u0027: fields.IntegerField(),"},{"line_number":36,"context_line":"        \u0027errors\u0027: fields.IntegerField(),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def _from_db_object(context, task_log, db_task_log):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7fcb1eef_0232cad0","line":37,"updated":"2022-10-05 16:21:19.000000000","message":"Unrelated change.","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9cfd93956989ea34a2fa42e3a39d338a4a780f54","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \u0027message\u0027: fields.StringField(),"},{"line_number":35,"context_line":"        \u0027task_items\u0027: fields.IntegerField(),"},{"line_number":36,"context_line":"        \u0027errors\u0027: fields.IntegerField(),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def _from_db_object(context, task_log, db_task_log):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e1c242a3_719e6134","line":37,"in_reply_to":"7fcb1eef_0232cad0","updated":"2022-10-05 17:24:50.000000000","message":"Done","commit_id":"d38a2aff90fbb2929f1f7933498daba8cfa6a03f"}]}
