)]}'
{"id":"openstack%2Fplacement~807014","triplet_id":"openstack%2Fplacement~master~I887606047ac1da3f2c59c17988ddcc17bd01ef43","project":"openstack/placement","branch":"master","topic":"story-2009159","hashtags":[],"change_id":"I887606047ac1da3f2c59c17988ddcc17bd01ef43","subject":"Narrow scope of set allocations database transaction","status":"MERGED","created":"2021-09-02 02:50:17.000000000","updated":"2021-09-10 21:10:57.000000000","submitted":"2021-09-10 21:09:24.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":41,"unresolved_comment_count":20,"has_review_started":true,"submission_id":"807014-story-2009159","meta_rev_id":"2350deb6dfd0e82f2ef8a295ba2f1c0115d4a8e8","_number":807014,"virtual_id_number":807014,"owner":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":0,"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2021-09-10 21:09:24.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"all":[{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":0,"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2021-09-10 21:10:57.000000000","post_submit":true,"permitted_voting_range":{"min":2,"max":2},"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":2,"date":"2021-09-10 21:10:57.000000000","post_submit":true,"permitted_voting_range":{"min":2,"max":2},"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"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":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"all":[{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":1,"date":"2021-09-10 18:06:45.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"recommended":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"all":[{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":0,"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":1,"date":"2021-09-10 21:10:57.000000000","post_submit":true,"permitted_voting_range":{"min":1,"max":2},"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","value":1,"default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},{"_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"]}],"CC":[{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2021-09-02 04:11:25.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":"2021-09-02 10:14:09.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":"2021-09-02 16:00:14.000000000","updated_by":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"reviewer":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"state":"CC"},{"updated":"2021-09-06 14:05:15.000000000","updated_by":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"reviewer":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"state":"REVIEWER"},{"updated":"2021-09-10 18:06:45.000000000","updated_by":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"reviewer":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"state":"REVIEWER"}],"messages":[{"id":"90114505a02fcdf4bcca27e7fb12c0c99ee88bb4","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 02:50:17.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"0eb92dd985db39a678ffec2c38965122e26f287b","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 02:51:14.000000000","message":"Topic story-2009159-rev3 removed","accounts_in_message":[],"_revision_number":1},{"id":"fdbdb577314284cfcb6f57a8f1fa456c2aafb7e9","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 02:51:17.000000000","message":"Topic set to story-2009159","accounts_in_message":[],"_revision_number":1},{"id":"74ae5347c12618366ad8dac3e73eed33405ac81a","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 02:54:24.000000000","message":"Patch Set 1: Workflow-1\n\nI\u0027m still working on updating docstrings and also trying to figure out how to adjust the regression test to be further up the stack since the private methods have changed (hopefully for the better).\n\nUploading now to let people take a look and comment sooner than later.","accounts_in_message":[],"_revision_number":1},{"id":"449dfd5f5b49a86f8dd417f706e21e19e1a25b85","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 02:55:25.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"191dad0a0378261f91ee31a9a7dcf4ed4b8ed2c2","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-02 04:11:25.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- grenade https://zuul.opendev.org/t/openstack/build/a33c5482047b4985b8458ebbd4e9b2fc : SUCCESS in 59m 00s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/7d1ddaf7471045668841824a7b7507b1 : SUCCESS in 1h 19m 23s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/076875d408f24f7cb0cfb3bafbb0fbfa : FAILURE in 7m 00s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/3af1061a485b443fb8dcf933bbd1d779 : FAILURE in 7m 18s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/dec2144306094a2396ed8db62d592bcf : SUCCESS in 5m 56s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/969d5451cbd64db5866644037f6d2c6b : SUCCESS in 6m 48s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/23c92c9cfcdb4943831ae9b09f11d134 : SUCCESS in 7m 26s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/8c0e155eb61a4c97b867d76a3eaed6d6 : SUCCESS in 9m 04s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6e843f0987674cde81227c8de4bba2bd : SUCCESS in 11m 19s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/0de6aaa559ad41bb8b80cafe26cd48e2 : FAILURE in 7m 42s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/54ad39a51e23466fb8dae316c860a3cc : FAILURE in 8m 34s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/613cc5665bdd4c9db297bd78f0fbef07 : FAILURE in 9m 52s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/49e3ccfd97214c60ac82441e8f9338a4 : FAILURE in 7m 58s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/d19e80ff9fa64ac2b5bce8d0b4ef600e : SUCCESS in 14m 30s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/62cdb72400f041ca94a6179e20b5dd08 : SUCCESS in 16m 35s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/f5e01e7c45964e34b7de1f3eae5f2607 : SUCCESS in 10m 42s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/6fc95a2796db48fbae2b3ed978d7ab35 : SUCCESS in 42m 42s","accounts_in_message":[],"_revision_number":1},{"id":"e8ef05e6a8fd7e438cbf9d87abdf2cc2dae95de6","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 04:57:40.000000000","message":"Patch Set 1:\n\nI think I have realized a much simpler way to handle this problem, will upload something new soon.","accounts_in_message":[],"_revision_number":1},{"id":"ed01281f5f4b30cc37bd5f523f719ed31e77c13f","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 08:36:52.000000000","message":"Patch Set 1:\n\n\u003e Patch Set 1:\n\u003e \n\u003e I think I have realized a much simpler way to handle this problem, will upload something new soon.\n\nNevermind, the thing I thought would work did not work. This might anyway be better thing as it minimizes the writes in the single transaction to only the consumer updates and the allocation updates. We noticed many more conflict collisions with consumer types and it might have been because there was too much in one transaction (?)","accounts_in_message":[],"_revision_number":1},{"id":"ee9ae99c3043a23d998deca55033390e92f0c7c7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 08:45:01.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"a1684aae6bd9476ea4f2ab6906adc73bf4271861","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 08:45:36.000000000","message":"Topic story-2009159-rev3 removed","accounts_in_message":[],"_revision_number":2},{"id":"ecd14dfd638e2ddaf310f52cf67c31a63192a355","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 08:45:38.000000000","message":"Topic set to story-2009159","accounts_in_message":[],"_revision_number":2},{"id":"878a09c7abe2bd037220b6389832f269e44f025f","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 08:53:52.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"ac2eb84a10f82ceab6f5d6f61762ab6e14d3100d","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 09:20:36.000000000","message":"Patch Set 2:\n\n\u003e Patch Set 1:\n\u003e \n\u003e \u003e Patch Set 1:\n\u003e \u003e \n\u003e \u003e I think I have realized a much simpler way to handle this problem, will upload something new soon.\n\u003e \n\u003e Nevermind, the thing I thought would work did not work. This might anyway be better thing as it minimizes the writes in the single transaction to only the consumer updates and the allocation updates. We noticed many more conflict collisions with consumer types and it might have been because there was too much in one transaction (?)\n\nOK, so I realized that the reason the other approach I tried didn’t work is because I was testing with the func test framework and SQLite. SQLite doesn’t have transaction isolation. The MySQL opportunistic test base would need to be used to test the other approach properly.\n\nWhich is: I think another way to do this would be to add a “with db_api.placement_context_manager.writer.independent.using(context):” around each of the “get after create failed with already exists” calls. The independent would make the get use a separate transaction.\n\nThat change would be a lot smaller and simpler but the trade off is the outer transaction would still cover a lot (too much?). Anyway it’s another option.","accounts_in_message":[],"_revision_number":2},{"id":"405b77bd9cb0db0ecdb59bbed9f9513a39706637","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-02 10:04:27.000000000","message":"Patch Set 2: Verified-1\n\n(1 comment)\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- grenade https://zuul.opendev.org/t/openstack/build/fe79b92ed0524b4dae96b268079be9a3 : SUCCESS in 1h 04m 39s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/ac7edf5890614b9d975485836a688a1e : SUCCESS in 1h 08m 55s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/e0a9d237964e4f118af3e6b5114138b6 : SUCCESS in 10m 43s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/ab984598b4b5488f89b16aa9a474ef54 : SUCCESS in 10m 09s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/843ff11b0d334027a85c98d7b3c7538b : FAILURE in 6m 02s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/2e84c27c4db84f1492def0b622a1e1a4 : SUCCESS in 7m 08s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/6157e2f39fcd4ed2a708f818b0a976c7 : SUCCESS in 5m 58s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/068c614420e74757bb057ece34544d47 : SUCCESS in 7m 50s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/e8babc82aff04941b446aebf62ab1ed4 : SUCCESS in 11m 59s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/437ac426a4f84d96bd69c90861b066a8 : SUCCESS in 7m 40s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/7eb8f83bc9a1448197a41f204bc361c4 : SUCCESS in 8m 38s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/1606a0aa9b0a49d58a6374aeaaf749d9 : SUCCESS in 6m 37s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/87b08e2df10a436f9e9533ebacd86222 : SUCCESS in 8m 42s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/ca763db688f24b639301b67aeed13ea6 : SUCCESS in 15m 51s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/cb3f9323ea2144cbbb4c78935944107e : SUCCESS in 33m 05s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/b275e85371de4008bbb4ac232aa58bbb : SUCCESS in 9m 07s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/0c7874a2d83643c78ac038cbc461f789 : SUCCESS in 51m 02s","accounts_in_message":[],"_revision_number":2},{"id":"20796967f9a925481999a56e09add337ff576603","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-02 10:14:09.000000000","message":"Patch Set 2: Code-Review-1\n\n(9 comments)\n\nThe logic looks OK to me. I have couple of nits and as you noted there are missing test coverage.\n\nCheers,\ngibi","accounts_in_message":[],"_revision_number":2},{"id":"715d3a1998cd523c9e86f1889f4ef4d888d5c48a","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-02 11:20:56.000000000","message":"Patch Set 2:\n\n(1 comment)","accounts_in_message":[],"_revision_number":2},{"id":"eb58436ced81535a7c2e09caa52c0d30afae6eaa","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 15:54:12.000000000","message":"Patch Set 2:\n\n(7 comments)\n\nThanks for review","accounts_in_message":[],"_revision_number":2},{"id":"523de221b4a4ed77a66e7e04f51bb0181326e00a","author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"date":"2021-09-02 16:00:14.000000000","message":"Patch Set 2:\n\nI retriggered (16x) the Octavia job that is broken in\nhttps://review.opendev.org/c/openstack/octavia-tempest-plugin/+/807111\n(with a depends-on this patch)\nIt passed without any issues in placement (one run failed for another reason)\n\nThanks for your work ;-)","accounts_in_message":[],"_revision_number":2},{"id":"ad2ba6646a46868efe51f7b3f0593f6e4ca35544","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 20:18:12.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"cb28ae5fbdb21c1e724c01cc393a633e832c7d45","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 20:34:12.000000000","message":"Patch Set 3:\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"ec92815d5d66b093d1845a8f2e2f577c297ad74d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-02 21:37:39.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/3146f95abbd34bfb8448189d6b5d94d7 : SUCCESS in 1h 07m 41s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/01b1e3ef83394ff29416ea6bf4d2c5dd : SUCCESS in 1h 08m 34s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/d7d88bc5892c42dd871c1a8f2bce9d0b : SUCCESS in 9m 36s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/55e34090cd6a4ff69e20346091917c62 : SUCCESS in 7m 12s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c961077b0af346648287d9f4de8ca8b6 : SUCCESS in 6m 13s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/0f99faf8aea141f99cbc7458f259d81e : SUCCESS in 6m 05s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/808d08baf20f4a9fb00384ff2ac92b0b : SUCCESS in 6m 18s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/eab0884385cc42cfb9a40223620100d3 : SUCCESS in 6m 34s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/11aabeba22754be4836c3a6f1e26d8f5 : SUCCESS in 8m 43s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/bfabac13c90a4efaac47fb8f9b1a22ae : SUCCESS in 6m 19s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/31bc35846974422b943a0e3301b56fdc : SUCCESS in 6m 37s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/49847fe6f5a84aaeb2b230529ac89d32 : SUCCESS in 6m 20s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/b6e7a2ac24e54f8da98eb51882b8757b : SUCCESS in 6m 24s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/15dbfd739d514b98acb51eee9351bb1b : SUCCESS in 15m 10s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/a1761a4bae51457abec39512ae25a9a7 : SUCCESS in 30m 55s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/db60581b32e64016b15d8c8fd7fea18b : SUCCESS in 12m 08s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/1acb628ff3c44fc2867d1c9ca9358fa2 : SUCCESS in 52m 40s","accounts_in_message":[],"_revision_number":3},{"id":"10775d43d3fc5aead092b9031718f04f475a02f3","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 22:10:20.000000000","message":"Patch Set 3:\n\n(2 comments)","accounts_in_message":[],"_revision_number":3},{"id":"b32a3d87837a4fd110d74611d363bfdd9fd74571","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-02 22:10:48.000000000","message":"Uploaded patch set 4.","accounts_in_message":[],"_revision_number":4},{"id":"836d4e7a2b411b679ccf99ca72816ab73fee01cd","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-02 23:14:24.000000000","message":"Patch Set 4: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/46414ca3a2b04491b08945c0ef8b4afc : SUCCESS in 58m 21s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/337d3461ab8041da92bd964f982f091b : SUCCESS in 1h 00m 51s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/73764f63cfa445cf8e63926b48f5a358 : SUCCESS in 6m 46s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/72db5b2c22184e5c8312e50595d81098 : SUCCESS in 7m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/c901a72c9472470b94e039857ab68b45 : SUCCESS in 5m 59s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/7825a10bf16042c49c4307f217b0db83 : SUCCESS in 7m 17s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/86ede01f66684864b6cfe7c3fde8de6b : SUCCESS in 6m 24s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/cfdd6d671d7b44dc8c7c97ccfbd0fe6e : SUCCESS in 6m 43s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/527b7aa79c9d47408464322f26ca2a5d : SUCCESS in 9m 28s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/5d593d04b1794a60bd4682d9e4d60f5d : SUCCESS in 7m 11s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/b9aec768080b4506992c06f4f1925ed8 : SUCCESS in 7m 50s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/e519b22f7ee041f59e869073ef4f5f96 : SUCCESS in 8m 05s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/0a1327f6bf824f44812a9af5ab11dc9a : SUCCESS in 6m 40s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/27383785bd9446b5b354ba5905d6c1d8 : SUCCESS in 14m 26s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/2278d7a01214493e8614589d85f49789 : SUCCESS in 29m 12s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/281d8d00a13945c99822fdddb36cba0a : SUCCESS in 12m 34s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/df111f566c68447da7463f71095fb65d : SUCCESS in 47m 26s","accounts_in_message":[],"_revision_number":4},{"id":"7cc3e7ad3a33ca373d65b87fb0448d87e7a64df6","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-03 07:50:23.000000000","message":"Patch Set 4:\n\n\u003e Patch Set 2:\n\u003e \n\u003e I retriggered (16x) the Octavia job that is broken in\n\u003e https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/807111\n\u003e (with a depends-on this patch)\n\u003e It passed without any issues in placement (one run failed for another reason)\n\u003e \n\u003e Thanks for your work ;-)\n\nThat is a good input for us. Thank you for trying this out!","accounts_in_message":[],"_revision_number":4},{"id":"1c654cfcf5cc466e013281e42804bb106ceef64d","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-03 08:01:47.000000000","message":"Patch Set 4: Code-Review+2\n\n(4 comments)\n\nLGTM. Thank you Melanie!","accounts_in_message":[],"_revision_number":4},{"id":"1948dd50b0c3b27f059574861c8a0711a37dda37","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-03 10:58:26.000000000","message":"Patch Set 4: Code-Review-1\n\n(1 comment)\n\nI\u0027ve just found another fallout of the transaction scope widening.","accounts_in_message":[],"_revision_number":4},{"id":"a2f48c449cd0763fb78ad4b8a5a73ecb854d1bcb","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-03 11:34:45.000000000","message":"Patch Set 4:\n\n(1 comment)","accounts_in_message":[],"_revision_number":4},{"id":"80b7e25ec8bcb0c88ff09ec01013f4da20f5374f","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-03 16:36:40.000000000","message":"Patch Set 4: Workflow-1\n\nThank you for your eagle eyes gibi. I will work on this today.","accounts_in_message":[],"_revision_number":4},{"id":"a656e3a875b343ffce63c9e80187ba96ee61d7c2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-06 05:57:54.000000000","message":"Uploaded patch set 5.","accounts_in_message":[],"_revision_number":5},{"id":"90d01287a667413a7a1321eb501d21c918f53780","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-06 06:02:00.000000000","message":"Patch Set 5:\n\nI have placed reproducer tests for the ResourceProviderConcurrentUpdateDetected lack of retry bug below this patch. Warning: they are pretty ugly ... I spent far more time on it than I care to admit and couldn\u0027t come up with something better.","accounts_in_message":[],"_revision_number":5},{"id":"522424d4d40a71e284e0c3974c36bed9f106c02b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-06 07:22:38.000000000","message":"Patch Set 5: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- grenade https://zuul.opendev.org/t/openstack/build/6421698894b947dcb8e4e25ce4e33a36 : SUCCESS in 1h 23m 24s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/e36e676d4f954e05ad68b9993bab6179 : SUCCESS in 1h 06m 16s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/ff3b2e19cbe44925ac3616a68efdc1e4 : FAILURE in 7m 53s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/17cf1e9d913e4022a534293b81cef3ff : FAILURE in 8m 07s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/662cd8bf4eb64e6b97aa659331b75896 : SUCCESS in 6m 22s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/5b62780c3fca4d9c8fb8886de9b743c0 : SUCCESS in 5m 50s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/991ad9b2eef54ef4ab1e0c40d2af29ef : SUCCESS in 6m 00s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/130f50ec2d374a09a8134f7409d6f4d4 : SUCCESS in 6m 43s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a1b725ba60804a4cb63e03f39f1b67b0 : SUCCESS in 14m 01s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/6fc0f2f5c6194863a0c5d842c30a3629 : SUCCESS in 11m 10s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/ec10165535d64c049430379db469ba69 : FAILURE in 7m 32s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/4703b86c2b5a461da3666da93d8200e0 : SUCCESS in 7m 58s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/d6e5efbb81de41eeb47db8ac3ccc3113 : SUCCESS in 8m 25s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/226bdbd06c7f4f1091c775fcb63f9554 : SUCCESS in 15m 11s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/7230320bab2d4633b51f1783402efd4d : SUCCESS in 24m 48s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/073689cd0cbe4d5e9a6c7cc28db1a94f : SUCCESS in 9m 30s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/339ef291c2b2463a8bd369dfae9016fa : SUCCESS in 47m 19s","accounts_in_message":[],"_revision_number":5},{"id":"0c2c86a38cd49dd93e3a62f842cbe9e6623278ea","author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"date":"2021-09-06 14:05:15.000000000","message":"Patch Set 5: Review-Priority+1","accounts_in_message":[],"_revision_number":5},{"id":"d5eb792fa1cab5b8f41a0faf4c0e45edc31added","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-07 09:51:18.000000000","message":"Patch Set 5: Code-Review+1\n\nThe logic looks good to me. I\u0027ve started running nova jobs against this patch with https://review.opendev.org/c/openstack/nova/+/807558 lets see if this works. If the nova jobs shows that this is good then I\u0027m OK to merge this fix even without the reproduction test as honestly I\u0027m stuck with that.","accounts_in_message":[],"_revision_number":5},{"id":"1a4920752fc33eb6c4c7408bfeafb7b13f93ef55","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-07 15:05:25.000000000","message":"Patch Set 5:\n\n\u003e Patch Set 5: Code-Review+1\n\u003e \n\u003e The logic looks good to me. I\u0027ve started running nova jobs against this patch with https://review.opendev.org/c/openstack/nova/+/807558 lets see if this works. If the nova jobs shows that this is good then I\u0027m OK to merge this fix even without the reproduction test as honestly I\u0027m stuck with that.\n\nFirst run looks clean with this fix in nova: https://review.opendev.org/c/openstack/nova/+/807558","accounts_in_message":[],"_revision_number":5},{"id":"1f4865b7f527b41517bc4e67fab83df7b0c32e4d","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-07 15:16:44.000000000","message":"Patch Set 5:\n\n\u003e Patch Set 5: Code-Review+1\n\u003e \n\u003e The logic looks good to me. I\u0027ve started running nova jobs against this patch with https://review.opendev.org/c/openstack/nova/+/807558 lets see if this works. If the nova jobs shows that this is good then I\u0027m OK to merge this fix even without the reproduction test as honestly I\u0027m stuck with that.\n\nAck. I will orphan the repro tests from this one. I don\u0027t feel great about them either and mainly I wrote them in order to demonstrate to myself (and others) whether the fix works. Thanks","accounts_in_message":[],"_revision_number":5},{"id":"3c8c8fce658f825ee3eaeb8ec66cf3898fad2281","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-07 16:47:56.000000000","message":"Uploaded patch set 6.","accounts_in_message":[],"_revision_number":6},{"id":"30edbbb6b39b1e9f0e8bbcbad75e5d12189083a2","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-07 18:05:26.000000000","message":"Patch Set 6: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/9d4f7370792945d09085c19b62855852 : SUCCESS in 1h 09m 51s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/769f85f8f37d459c8ad927f9a817cfaf : SUCCESS in 1h 12m 49s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/eb5dcc36c1164c18bd419528817bfbf7 : SUCCESS in 7m 02s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/d9e555da2e254c02a2b564c08d41c3f8 : SUCCESS in 7m 41s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/772965b10fa1431488cddbba7c1b5a45 : SUCCESS in 6m 41s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/9c754891089d4cc2aee884ad32766a6d : SUCCESS in 6m 34s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/d9aa19b076ef4c6bbc26f52e91d468d5 : SUCCESS in 7m 04s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/3d9a498b2d2c4c0e9c6f1fe5667d112a : SUCCESS in 6m 19s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/2022e73c3b9f45efb8c6da9cd448ef45 : SUCCESS in 8m 51s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/2049ac3a1226460a9cbb993e58b7d8f9 : SUCCESS in 6m 14s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/2628ed40f4d64974845fc37fec972e0f : SUCCESS in 6m 28s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/66b1da9cd6784119b1296f265b2d0ef8 : SUCCESS in 7m 00s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/bbd5f9cfb4ec412283cf383d6fe63025 : SUCCESS in 7m 47s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/37b7b9f2ddce4257a1ec50b5cf4ea5bf : SUCCESS in 14m 46s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/a20f52291d904bfd9f828d6e41fe3e35 : SUCCESS in 18m 43s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/444b5ae94a754281971ec96a1d48211c : SUCCESS in 11m 34s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/5828a2aa5b764abfb83953491268f422 : SUCCESS in 47m 19s","accounts_in_message":[],"_revision_number":6},{"id":"6176871e726defad42ebef74ef8c6f6df43d825b","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-08 12:05:59.000000000","message":"Patch Set 6: Code-Review+2\n\nThe second run on[1] was not produced the race either so I\u0027m good with this.\n\n[1] https://review.opendev.org/c/openstack/nova/+/807558","accounts_in_message":[],"_revision_number":6},{"id":"04e3d4abad66b67c5a9e33f8825dae0e7d0ec3ab","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-09-09 08:51:31.000000000","message":"Patch Set 6:\n\n\u003e Patch Set 6: Code-Review+2\n\u003e \n\u003e The second run on[1] was not produced the race either so I\u0027m good with this.\n\u003e \n\u003e [1] https://review.opendev.org/c/openstack/nova/+/807558\n\nand the third run was clean of the errors too.","accounts_in_message":[],"_revision_number":6},{"id":"dab5b56f0afdb90c83a4476002649f3c4439ca93","author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"date":"2021-09-10 10:43:47.000000000","message":"Patch Set 6: Code-Review+1\n\n(9 comments)\n\nLooks good but I need to make a second glance by this afternoon.","accounts_in_message":[],"_revision_number":6},{"id":"bd95cd6f3398e8ff7b1ce5a5fe1141c8afa46005","author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"date":"2021-09-10 13:49:21.000000000","message":"Patch Set 6: Code-Review+2 Workflow+1\n\n(4 comments)\n\nThanks for the fixup, I know how this was hard to work on. Just a few nits but I don\u0027t want to hold this bugfix given them.","accounts_in_message":[],"_revision_number":6},{"id":"eb37f4fa8738ee1e7e8d981b2a0808b186baee73","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 13:49:58.000000000","message":"Patch Set 6: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":6},{"id":"369ef7ba0c1ca377308956057025f7aef4d486a0","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 15:07:49.000000000","message":"Patch Set 6: Verified-2\n\nBuild failed (gate pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\n\n\n- grenade https://zuul.opendev.org/t/openstack/build/3731f9551a42476597406b37a86158d4 : SUCCESS in 1h 08m 35s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/429f9e9485c04c71ba160cf9274ce10e : SUCCESS in 1h 09m 23s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/b703154f239b4a35af6059cd22f4796d : SUCCESS in 7m 21s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/620f395746294249901a02e9ff7a50f4 : SUCCESS in 7m 07s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/f78b5fed916f421a864b9c31b95c105b : SUCCESS in 6m 08s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/ff9fd94a3a774cd0aade2c668a3692d9 : SUCCESS in 7m 47s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f36c6d8a64fc49658939283cb5b878b6 : SUCCESS in 8m 58s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/0215144a83ac4c0aaf9b79f9c6c8df32 : FAILURE in 6m 51s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/47b7324b7cdd44d199dd32f71ddaead2 : FAILURE in 8m 11s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/bc74f180d6484056ad8f91f5ff78d910 : FAILURE in 7m 42s\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/cce71252d45f4421a9b8c8f826d980e8 : SUCCESS in 18m 30s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/f064a94c2caa4fe7b297ff494f211af9 : SUCCESS in 49m 48s","accounts_in_message":[],"_revision_number":6},{"id":"8f2a80010cadcf15c67436b64b3f80b6b9a40990","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-10 18:06:25.000000000","message":"Uploaded patch set 7: Patch Set 6 was rebased.","accounts_in_message":[],"_revision_number":7},{"id":"a727a4daa4247712f41a260d2666892f953f504f","author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"date":"2021-09-10 18:06:45.000000000","message":"Patch Set 7: Workflow+1\n\nJust rebased on another fix","accounts_in_message":[],"_revision_number":7},{"id":"1c4bbd221c8a0ae38a4c137b96e1dc40828599a0","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-10 18:36:11.000000000","message":"Topic story/2009209 removed","accounts_in_message":[],"_revision_number":7},{"id":"50cad60a7240e026d388bd8d50e2c334bb5fbdf0","tag":"autogenerated:gerrit:setTopic","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-09-10 18:36:16.000000000","message":"Topic set to story-2009159","accounts_in_message":[],"_revision_number":7},{"id":"bf6e37a714738e829adbd4e750e8e91d4532369f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 19:18:26.000000000","message":"Patch Set 7: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/4270796bbec84ee0ac5be4c542041b46 : SUCCESS in 1h 02m 33s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/245e8a1d2a334fd7a940cb92b0bfb730 : SUCCESS in 1h 07m 34s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/e4b88b36f94b4d75a7e9e967e42eae9e : SUCCESS in 7m 20s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/75258490e25a49389a1838b300d401d6 : SUCCESS in 5m 50s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/72ec0a2d064047d198ca6e0e8f140f0f : SUCCESS in 5m 55s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/25eea02c1664429ea16a6391263925fb : SUCCESS in 5m 47s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/c3891715b0bc46a79b56dc06bbedcab9 : SUCCESS in 6m 08s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/c3cf4f6557e64eae83de14df542c7755 : SUCCESS in 6m 17s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/a3c592a7e41e428fab444ddb6d75cd12 : SUCCESS in 8m 17s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/e7addf658e8745b1bf90604aff94bed2 : SUCCESS in 5m 19s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/758075c71aaa479d9d438d14f5117686 : SUCCESS in 5m 48s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/028700368e534e389c43a35450e354df : SUCCESS in 6m 10s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/5d4828d8f1044642840d6fe8b1ae5b65 : SUCCESS in 6m 39s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/af46a45551ff4c55bf6bc49e91c679ab : SUCCESS in 16m 00s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/aa6dd6835d5c40bfb423c55330c1ac68 : SUCCESS in 22m 21s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/b4e15da41ccb464f9adf24e1a4f2a804 : SUCCESS in 9m 27s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/d37f4bfac75843dca2b9426950a22994 : SUCCESS in 48m 01s","accounts_in_message":[],"_revision_number":7},{"id":"0ea0f70c5e4d528bac036546a7192f2dfad6eb0a","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 19:19:03.000000000","message":"Patch Set 7: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":7},{"id":"ae025d77ef08273f6c84ea24d172015f49520396","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 21:09:24.000000000","message":"Patch Set 7: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/b9eaa61f1b574754980134da4d2ce2ec : SUCCESS in 1h 02m 37s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/74485c2a029041ab87e3f914fb1e841b : SUCCESS in 1h 00m 22s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/b62daa6316bd47539ef492a3ead2a332 : SUCCESS in 7m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/1636d3b2d6db4ad195cb10a3921b65e7 : SUCCESS in 6m 48s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/3c8bc6293b4d4ad78abdbb616c9c101b : SUCCESS in 6m 01s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/096db8bb596a46d8bb045a29c1ccfb18 : SUCCESS in 8m 42s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6d61d8ba8bf84eee8ce43bded1c2f704 : SUCCESS in 10m 21s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/f636ac625ba14c92bcd017ebf4b0ea04 : SUCCESS in 6m 30s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/c00368eea1834d6b8ea14c1e064ae976 : SUCCESS in 6m 54s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/450c5eceb66b448a91bbac5e7f8f14db : SUCCESS in 8m 07s\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/44d449822bc445cfac08adb5c8574e83 : SUCCESS in 15m 19s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/0b72d4d278c04bfa871154513927ff6d : SUCCESS in 39m 31s","accounts_in_message":[],"_revision_number":7},{"id":"2dab5533cffe00fcf7fdc8b5091b9d785c92adbf","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 21:09:24.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":7},{"id":"f804be3987a1a5160de796d5a6caa0ff53216db3","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-09-10 21:10:57.000000000","message":"Patch Set 7:\n\nBuild succeeded (promote pipeline).\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/5965346226d8479ca642cc6439b268e4 : SUCCESS in 1m 06s","accounts_in_message":[],"_revision_number":7}],"current_revision_number":7,"current_revision":"d90f16720b79a9479bc9a369e6c1f88aa2481cc1","revisions":{"7c9aaf3eecf76d8e575ebdcf5b59bf123e67ac82":{"kind":"REWORK","_number":1,"created":"2021-09-02 02:50:17.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/1"}}},"commit":{"parents":[{"commit":"8d46b50dc56ee963de0f49542828643e42af7297","subject":"Add reproducer for Project creation race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8d46b50dc56ee963de0f49542828643e42af7297"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 02:39:34.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added[1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2005473\nTask: 36421\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7c9aaf3eecf76d8e575ebdcf5b59bf123e67ac82"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7c9aaf3eecf76d8e575ebdcf5b59bf123e67ac82"}]},"branch":"refs/heads/master"},"133fca1e9b0f5d5b8690bf00e918f11234206065":{"kind":"REWORK","_number":2,"created":"2021-09-02 08:45:01.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/2"}}},"commit":{"parents":[{"commit":"2786060fac6aaa9db26409305ed357e7800396cc","subject":"Add reproducer for Project creation race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2786060fac6aaa9db26409305ed357e7800396cc"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 08:40:23.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2005473\nTask: 36421\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/133fca1e9b0f5d5b8690bf00e918f11234206065"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/133fca1e9b0f5d5b8690bf00e918f11234206065"}]},"branch":"refs/heads/master"},"bee5b4a8ae7acb0c5b43f20bef6a60a95bc85df0":{"kind":"REWORK","_number":3,"created":"2021-09-02 20:18:12.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/3"}}},"commit":{"parents":[{"commit":"8b000867ca50ca99877fe8819785918aa6f58764","subject":"Add reproducer for Project creation race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8b000867ca50ca99877fe8819785918aa6f58764"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 20:16:08.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2009159\nTask: 43143\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/bee5b4a8ae7acb0c5b43f20bef6a60a95bc85df0"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/bee5b4a8ae7acb0c5b43f20bef6a60a95bc85df0"}]},"branch":"refs/heads/master"},"61957566adb49aa6c65271f699df72a4dc398d36":{"kind":"REWORK","_number":4,"created":"2021-09-02 22:10:48.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/4","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/4","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/4"}}},"commit":{"parents":[{"commit":"8b000867ca50ca99877fe8819785918aa6f58764","subject":"Add reproducer for Project creation race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8b000867ca50ca99877fe8819785918aa6f58764"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 22:00:50.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2009159\nTask: 43143\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/61957566adb49aa6c65271f699df72a4dc398d36"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/61957566adb49aa6c65271f699df72a4dc398d36"}]},"branch":"refs/heads/master"},"6078652428749ce416c88bb875c48b91844a63d6":{"kind":"REWORK","_number":5,"created":"2021-09-06 05:57:54.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/5","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/5","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/5"}}},"commit":{"parents":[{"commit":"f4c9c82f753380b221520d4184835b62cebc4205","subject":"Add reproducer for Allocation/Inventory update race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/f4c9c82f753380b221520d4184835b62cebc4205"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-06 05:56:50.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2009159\nTask: 43143\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/6078652428749ce416c88bb875c48b91844a63d6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/6078652428749ce416c88bb875c48b91844a63d6"}]},"branch":"refs/heads/master"},"5ace386efe0026edd4bdddedfafc5c89c5aca969":{"kind":"REWORK","_number":6,"created":"2021-09-07 16:47:56.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/6","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/6","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/6"}}},"commit":{"parents":[{"commit":"8b000867ca50ca99877fe8819785918aa6f58764","subject":"Add reproducer for Project creation race bug","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8b000867ca50ca99877fe8819785918aa6f58764"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-07 16:47:24.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2009159\nTask: 43143\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/5ace386efe0026edd4bdddedfafc5c89c5aca969"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/5ace386efe0026edd4bdddedfafc5c89c5aca969"}]},"branch":"refs/heads/master"},"d90f16720b79a9479bc9a369e6c1f88aa2481cc1":{"kind":"TRIVIAL_REBASE","_number":7,"created":"2021-09-10 18:06:25.000000000","uploader":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"ref":"refs/changes/14/807014/7","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/14/807014/7","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/14/807014/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/14/807014/7"}}},"commit":{"parents":[{"commit":"7d903412550b17c10c037732b00e6ad521353680","subject":"Call Engine.execute() in func tests for oslo.db 11.0.0","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7d903412550b17c10c037732b00e6ad521353680"}]}],"author":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-02 00:50:19.000000000","tz":0},"committer":{"name":"melanie witt","email":"melwittt@gmail.com","date":"2021-09-10 18:05:44.000000000","tz":0},"subject":"Narrow scope of set allocations database transaction","message":"Narrow scope of set allocations database transaction\n\nWhen consumer types were added [1], the set allocations code path was\nmodified to perform util.ensure_consumer() and\nAllocationList.replace_all() in a single database transaction in order\nto provide automatic rollbacks of consumer type changes by racing\nrequests.\n\nThis proved to be problematic because util.ensure_consumer() contains\nlogic to \"get or create\" database records for project, user, consumer\ntype, and consumer. By definition, the \"get or create\" pattern cannot\nreside in the same database transaction else a DuplicateEntry database\nerror followed by an attempt to \"get\" the existing record will fail as\nthe single database transaction is being rolled back and no new\nstatements can be executed.\n\nBecause of this, we cannot wrap util.ensure_consumer() under the same\ndatabase transaction as Allocation.replace_all() and we need to reduce\nthe scope of the database transaction to cover only the updates to a\nconsumer (if the requested project/user/consumer type differ from what\nwas found in the database) and the write of the allocation records.\n\nThis changes things around to stop performing \"difference\" updates\ninside of the util.ensure_consumer() method and instead return what was\nrequested as an additional return value. Then, we move the database\ntransaction to cover only util.update_consumers() and\nAllocationList.replace_all() so that if replace_all() fails due to a\ngeneration conflict, the consumer updates will also be rolled back.\n\nThis approach was chosen in an effort to introduce the least amount of\nchange to the existing understood code.\n\nStory: 2009159\nTask: 43143\n\n[1] I24c2315093e07dbf25c4fb53152e6a4de7477a51\n\nChange-Id: I887606047ac1da3f2c59c17988ddcc17bd01ef43\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d90f16720b79a9479bc9a369e6c1f88aa2481cc1"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d90f16720b79a9479bc9a369e6c1f88aa2481cc1"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"status":"CLOSED","labels":[{"label":"Verified","status":"OK","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}},{"label":"Workflow","status":"OK","applied_by":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"}},{"label":"Review-Priority","status":"MAY","applied_by":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"}}]}],"submit_requirements":[{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Workflow\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dCustom-Rule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dCustom-Rule"],"failing_atoms":[],"atom_explanations":{}}}]}
