)]}'
{"id":"openstack%2Foslo.versionedobjects~701795","triplet_id":"openstack%2Foslo.versionedobjects~master~I4730dd45359db54318843d2790b74d43430368ee","project":"openstack/oslo.versionedobjects","branch":"master","topic":"better-defaults","hashtags":[],"change_id":"I4730dd45359db54318843d2790b74d43430368ee","subject":"Add EphemeralObject mix-in class for sane field defaulting","status":"ABANDONED","created":"2020-01-09 18:15:46.000000000","updated":"2021-04-16 10:48:14.000000000","total_comment_count":12,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"11c413fcf36235082d95a18f6665777522d39003","_number":701795,"virtual_id_number":701795,"owner":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"date":"2020-03-07 19:40:38.000000000","_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"tag":"autogenerated:zuul:check","value":1,"date":"2020-01-10 18:53:36.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"recommended":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},{"value":1,"date":"2020-01-15 22:06:35.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":2,"date":"2020-01-15 15:23:52.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"value":1,"date":"2020-11-19 06:02:20.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},{"value":1,"date":"2020-01-13 10:09:10.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","value":1,"default_value":0,"optional":true},"Workflow":{"rejected":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"all":[{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":-1,"date":"2020-01-15 22:08:37.000000000","permitted_voting_range":{"min":-1,"max":1},"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Backport-Candidate":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"permitted_voting_range":{"min":-2,"max":2},"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do Not Backport","-1":"Not A Backport Candidate"," 0":"Backport Review Needed","+1":"Proposed Backport","+2":"Should Backport"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2020-01-10 18:53:36.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2020-01-13 10:09:10.000000000","updated_by":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"reviewer":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"state":"REVIEWER"},{"updated":"2020-01-15 15:23:52.000000000","updated_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"reviewer":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"state":"REVIEWER"},{"updated":"2020-01-15 22:06:35.000000000","updated_by":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"reviewer":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"state":"REVIEWER"},{"updated":"2020-03-07 19:40:38.000000000","updated_by":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"reviewer":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"state":"REVIEWER"},{"updated":"2020-11-19 06:02:20.000000000","updated_by":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"reviewer":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"state":"REVIEWER"}],"messages":[{"id":"ec09524dd52ec66cfe3a9b003a0397c813429774","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-09 18:15:46.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"005d425d43e239c6e80e357ea2b985a2d11a74fe","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2020-01-09 18:33:53.000000000","message":"Patch Set 1:\n\nOkay, IIUC with this approach I would need to define an EphemeralFoo(Foo, EphemeralObject) for every Foo type I want to use in this way, right?\n\nThat seems heavy, but maybe that\u0027s desirable.\n\nAs an alternative, from a consumer\u0027s point of view I feel like it would be preferable to be able to tell the field to default on init without having to define a new type. Like\n\n \u0027request_level_params\u0027: fields.ObjectField(\u0027RequestLevelParams\u0027,\n                                            default_fn\u003dRequestLevelParams,\n                                            default_on_init\u003dTrue)\n\nThoughts?","accounts_in_message":[],"_revision_number":1},{"id":"b3d87e1a1e7483b7a24685df851ca9710a50cfac","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-09 18:39:41.000000000","message":"Patch Set 1:\n\n\u003e Okay, IIUC with this approach I would need to define an\n \u003e EphemeralFoo(Foo, EphemeralObject) for every Foo type I want to use\n \u003e in this way, right?\n \u003e \n \u003e That seems heavy, but maybe that\u0027s desirable.\n\nIt\u0027s explicit, which is why it\u0027s desirable. However, I would expect Nova to define a single class that mixes in the mix-in, and then our objects just inherit from that so they don\u0027t have to do the mixing-in themselves, but the parentage is still there. So you\u0027d do something like\n\n\n class RequestyThing(objects.NovaEphemeralObject):\n ...\n\nAnd it would be clear from the parentage that this is one of those things, without you having to mix in this special behavior into each. I could have defined the straight subclass here as well, but the way the rest of the special behaviors are in o.vo, a mix-in is the convention.\n\n \u003e As an alternative, from a consumer\u0027s point of view I feel like it\n \u003e would be preferable to be able to tell the field to default on init\n \u003e without having to define a new type. Like\n \u003e \n \u003e \u0027request_level_params\u0027: fields.ObjectField(\u0027RequestLevelParams\u0027,\n \u003e default_fn\u003dRequestLevelParams,\n \u003e default_on_init\u003dTrue)\n \u003e \n \u003e Thoughts?\n\nThat\u0027s far more verbose for an object with several fields, which I would assume would get rather laborious over time. However, the important part for me is that we classify an object as \"one of a type of thing that doesn\u0027t need to worry about this particular detail\". We can\u0027t change the assumptions of the base object without affecting everyone, so opting out of that worry is our only compatible option.","accounts_in_message":[],"_revision_number":1},{"id":"826ff399dce28f920d21de33e94f3ef75a862da7","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2020-01-09 20:06:44.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- tempest-full https://zuul.opendev.org/t/openstack/build/0ecac61f88f84cc3801dc754b01c4774 : SUCCESS in 1h 44m 31s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/a48c0868007e486f95b345324af2fae8 : SUCCESS in 1h 37m 04s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/e6690376e577499f9cd97c5d30a67004 : SUCCESS in 4m 06s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/43f0ed151bfb4a0cae08ecfe1c6bce50 : SUCCESS in 5m 30s\n- openstack-tox-py27 https://zuul.opendev.org/t/openstack/build/0d47a3b735bf4aa798016664a9515f5c : SUCCESS in 7m 03s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/21dff10114554a8da147aaefa8527b25 : SUCCESS in 5m 05s\n- openstack-tox-py37 https://zuul.opendev.org/t/openstack/build/59d27affac204c1eaaefa6ee4931a58e : SUCCESS in 4m 42s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/da8b67f831274a369386d351dc5e1202 : SUCCESS in 4m 14s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/8d51dcca16a44e8b9dafb5ac99f9d899 : SUCCESS in 5m 14s\n- oslo.versionedobjects-src-grenade-devstack-multinode https://zuul.opendev.org/t/openstack/build/49eed03a24554f4faf86d0be395ad156 : FAILURE in 1h 16m 15s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"6e67ac2c6d607b541587952f0236d221e1ece9b5","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2020-01-09 21:05:43.000000000","message":"Patch Set 1:\n\n\u003e It\u0027s explicit\n\u003csnip\u003e\n\u003e That\u0027s far more verbose\n\nI don\u0027t understand how it\u0027s less explicit to make default_on_init\u003dTrue (or ephemeral\u003dTrue, or whatever) an initialization option like nullable and read_only are. The only difference is that the ephemeral-ness is encoded in the type name rather than in a kwarg. This:\n\n \u0027my_field\u0027: ObjectField(\u0027Foo\u0027, default_fn\u003dFoo, ephemeral\u003dTrue),\n\nis not significantly more verbose than this:\n\n \u0027my_field\u0027: NovaEphemeralObjectField(\u0027Foo\u0027, default_fn\u003dFoo),\n\n\u003e I would expect Nova to define a single class\n\nBut don\u0027t we need a new class per base type that we want to be ephemeral? Using the example from [1], that would mean that, in addition to the NovaEphemeralObjectField(ObjectField, EphemeralObject) and RequestLevelParams(NovaEphemeralObjectField) for RequestSpec.request_level_params, we also need a NovaEphemeralSetOfStringsField(SetOfStringsField, EphemeralObject) for RequestLevelParams.root_required and .root_forbidden.\n\n(I may be misunderstanding exactly what level you\u0027re suggesting defining the new classes at, but I\u0027m advocating for an approach that doesn\u0027t require new classes at all.)\n\n\u003e We can\u0027t change the assumptions of the base object\n\nAgreed, but neither approach does that. The default would be ephemeral\u003dFalse, which skips the obj_set_defaults on init, the legacy behavior.\n\n(BTW, then if you really wanted to, you could still define a\n\n NovaEphemeralObjectField(ObjectField):\n     def __init__(self, **kwargs):\n         kwargs.setdefault(\u0027ephemeral\u0027, True)\n         super().__init__(**kwargs)\n\nbut of course I\u0027m advocating against that.)\n\n[1] https://review.opendev.org/#/c/699050/","accounts_in_message":[],"_revision_number":1},{"id":"f3a9c5e288982ab0f0562acf503c75ceb454fbce","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2020-01-09 21:21:54.000000000","message":"Patch Set 1:\n\nMaybe we can kill two birds: default_on_init\u003d$callable (mutually exclusive with existing default\u003d)\n\n/me hacks...","accounts_in_message":[],"_revision_number":1},{"id":"b2f0662c47cd5b5fa65136b8c11f6932c25af99d","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-09 21:53:09.000000000","message":"Patch Set 1:\n\n\u003e \u003e It\u0027s explicit\n \u003e \u003csnip\u003e\n \u003e \u003e That\u0027s far more verbose\n \u003e \n \u003e I don\u0027t understand how it\u0027s less explicit to make default_on_init\u003dTrue\n \u003e (or ephemeral\u003dTrue, or whatever) an initialization option like\n \u003e nullable and read_only are. The only difference is that the\n \u003e ephemeral-ness is encoded in the type name rather than in a kwarg.\n \u003e This:\n \u003e \n \u003e \u0027my_field\u0027: ObjectField(\u0027Foo\u0027, default_fn\u003dFoo, ephemeral\u003dTrue),\n \u003e \n \u003e is not significantly more verbose than this:\n \u003e \n \u003e \u0027my_field\u0027: NovaEphemeralObjectField(\u0027Foo\u0027, default_fn\u003dFoo),\n\nIt\u0027s more verbose because I\u0027m suggesting that fields either all be default-on-init or not based on whether or not they inherit from a class that indicates that an object is entirely ephemeral. You inherit, you get defaulting on init. You don\u0027t inherit you don\u0027t. Putting the ephemeralness on the field both (a) requires an additional (or different) flag from today on each field and (b) allows mixing of default-on-init fields with default-only-later fields on the same object. Since I don\u0027t want someone to be able to do that on, say, our Migration object for a new field they add.\n\n\n \u003e But don\u0027t we need a new class per base type that we want to be\n \u003e ephemeral?\n\nNo.\n \u003e Using the example from [1], that would mean that, in\n \u003e addition to the NovaEphemeralObjectField(ObjectField,\n \u003e EphemeralObject) and RequestLevelParams(NovaEphemeralObjectField)\n \u003e for RequestSpec.request_level_params, we also need a\n \u003e NovaEphemeralSetOfStringsField(SetOfStringsField, EphemeralObject)\n \u003e for RequestLevelParams.root_required and .root_forbidden.\n \u003e \n \u003e (I may be misunderstanding exactly what level you\u0027re suggesting\n \u003e defining the new classes at, but I\u0027m advocating for an approach\n \u003e that doesn\u0027t require new classes at all.)\n\nNo, definitely not. None of the fields have to be subclassed.\n\nRequestLevelParams inherits from NovaEphemeralObject instead of NovaObject. That is the only change you need to make.","accounts_in_message":[],"_revision_number":1},{"id":"410c4363d10c044f5b28d466ddbb86e19713a51d","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2020-01-09 22:28:16.000000000","message":"Patch Set 1: Code-Review+1\n\n(1 comment)\n\nOkay, discussed this some more in IRC [1], and I\u0027m convinced it\u0027s the right approach. I think we agreed to \"try it out\" directly in nova first.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2020-01-09.log.html#t2020-01-09T21:40:02","accounts_in_message":[],"_revision_number":1},{"id":"0dc2ca4ae09da6c9006ae36a1e10c740e1245f45","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2020-01-10 11:30:50.000000000","message":"Patch Set 1: Code-Review+1\n\n(6 comments)\n\nThank you Dan!","accounts_in_message":[],"_revision_number":1},{"id":"ef186b994f371caf2941b9f5e574e03967d573f3","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-10 16:34:54.000000000","message":"Patch Set 1:\n\n(3 comments)","accounts_in_message":[],"_revision_number":1},{"id":"2c2fe2421358a75631d1fcf7e135903bc0274f26","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-10 16:41:07.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"3b4321c1327256f047816d2438cd8c0a30fac22b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2020-01-10 18:53:36.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- tempest-full https://zuul.opendev.org/t/openstack/build/7bae233b2d2a47b2a6bf991d05ef8223 : SUCCESS in 1h 50m 12s\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/ec86673c1929449b8fe8c7375b2da468 : SUCCESS in 1h 14m 05s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/a6dbe3c223ea44779e4c6fef67d228c8 : SUCCESS in 5m 05s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/9a427ab48067419d8c865db91631bbc0 : SUCCESS in 4m 23s\n- openstack-tox-py27 https://zuul.opendev.org/t/openstack/build/21a5b0baf3504de0a7372797b412e20d : SUCCESS in 4m 57s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/6fce56a91e14481299581fe3e045f5af : SUCCESS in 4m 53s\n- openstack-tox-py37 https://zuul.opendev.org/t/openstack/build/3ddc21b62e1d493a840cb7d666910746 : SUCCESS in 4m 08s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/aea00c9a1e4045449406593967869a8b : SUCCESS in 7m 32s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/2b480302b80d4ea387d587846d36a509 : SUCCESS in 6m 43s\n- oslo.versionedobjects-src-grenade-devstack-multinode https://zuul.opendev.org/t/openstack/build/adfd4f5110f0481f8432233b3e25a3aa : FAILURE in 1h 08m 25s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"d00942319c6faa75378c2b343862faeb6ddc37c5","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2020-01-13 10:09:10.000000000","message":"Patch Set 2: Code-Review+1\n\n(2 comments)","accounts_in_message":[],"_revision_number":2},{"id":"1d3102fe3324e8e7d228e56a1b1a37de4bb18ff3","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2020-01-15 15:23:52.000000000","message":"Patch Set 2: Code-Review+2","accounts_in_message":[],"_revision_number":2},{"id":"f4fd49604cbdf478a2b974112647fd7f88136b8c","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2020-01-15 22:06:35.000000000","message":"Patch Set 2: Code-Review+1","accounts_in_message":[],"_revision_number":2},{"id":"4b14666b11e93746d488a8d9f202c02d08a4f4cd","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2020-01-15 22:08:37.000000000","message":"Patch Set 2: Workflow-1\n\nStephen, just FYI, we\u0027ve copied this into Nova to avoid having to wait for a o.vo release to test this out. So I think we should wait for consensus there (I think we\u0027re basically there) before we put this in just so we don\u0027t have to worry about undoing it. When that happens, we can do this, release and then make nova depend on it.","accounts_in_message":[],"_revision_number":2},{"id":"5ac2dc447a4b8ef4d5af2d611d473c6df56a552d","author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"date":"2020-03-07 19:40:38.000000000","message":"Patch Set 2:\n\n\u003e Stephen, just FYI, we\u0027ve copied this into Nova to avoid having to\n \u003e wait for a o.vo release to test this out. So I think we should wait\n \u003e for consensus there (I think we\u0027re basically there) before we put\n \u003e this in just so we don\u0027t have to worry about undoing it. When that\n \u003e happens, we can do this, release and then make nova depend on it.\n\nAny updates on this?","accounts_in_message":[],"_revision_number":2},{"id":"13ca5a01cd5c33cf5da8b4bba83f193c19bc33c2","author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"date":"2020-11-19 06:02:04.000000000","message":"Patch Set 2: Backport-Candidate+1","accounts_in_message":[],"_revision_number":2},{"id":"cab36fe296596774fc44b9e85e263ec407ac64c4","author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"date":"2020-11-19 06:02:20.000000000","message":"Patch Set 2: -Backport-Candidate Code-Review+1","accounts_in_message":[],"_revision_number":2},{"id":"11c413fcf36235082d95a18f6665777522d39003","tag":"autogenerated:gerrit:abandon","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2021-04-16 10:48:14.000000000","message":"Abandoned\n\nThere hasn\u0027t been an update on this in some time. I think it\u0027s safe to say this can be abandoned. Please let us know if you want to pick this up again","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"2bae882a003c0d6b8693332666441c3d8c94c42b","revisions":{"f0de5ab0a29d08a35040d5f6c3f449f9b31110ec":{"kind":"REWORK","_number":1,"created":"2020-01-09 18:15:46.000000000","uploader":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"ref":"refs/changes/95/701795/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.versionedobjects","ref":"refs/changes/95/701795/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/1"}}},"commit":{"parents":[{"commit":"f806dda6755546d15fcb620a0e4f9e446e6b6c47","subject":"Import ABCs from collections.abc","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/f806dda6755546d15fcb620a0e4f9e446e6b6c47"}]}],"author":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2020-01-09 18:24:15.000000000","tz":-480},"committer":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2020-01-09 18:24:15.000000000","tz":-480},"subject":"Add EphemeralObject mix-in class for sane field defaulting","message":"Add EphemeralObject mix-in class for sane field defaulting\n\nThis adds a class that gives more conventional field defaulting for\nobjects that are RPC-only, or stored as a blob in the database.\n\nChange-Id: I4730dd45359db54318843d2790b74d43430368ee\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/f0de5ab0a29d08a35040d5f6c3f449f9b31110ec"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/f0de5ab0a29d08a35040d5f6c3f449f9b31110ec"}]},"branch":"refs/heads/master"},"2bae882a003c0d6b8693332666441c3d8c94c42b":{"kind":"REWORK","_number":2,"created":"2020-01-10 16:41:07.000000000","uploader":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"ref":"refs/changes/95/701795/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.versionedobjects","ref":"refs/changes/95/701795/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/95/701795/2"}}},"commit":{"parents":[{"commit":"f806dda6755546d15fcb620a0e4f9e446e6b6c47","subject":"Import ABCs from collections.abc","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/f806dda6755546d15fcb620a0e4f9e446e6b6c47"}]}],"author":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2020-01-09 18:24:15.000000000","tz":-480},"committer":{"name":"Dan Smith","email":"dansmith@redhat.com","date":"2020-01-10 16:40:32.000000000","tz":-480},"subject":"Add EphemeralObject mix-in class for sane field defaulting","message":"Add EphemeralObject mix-in class for sane field defaulting\n\nThis adds a class that gives more conventional field defaulting for\nobjects that are RPC-only, or stored as a blob in the database.\n\nChange-Id: I4730dd45359db54318843d2790b74d43430368ee\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/2bae882a003c0d6b8693332666441c3d8c94c42b"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/2bae882a003c0d6b8693332666441c3d8c94c42b"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
