)]}'
{"id":"openstack%2Fplacement~782988","triplet_id":"openstack%2Fplacement~master~I1dda02d46cb019eedd6e3ef64e327ac85bb7c484","project":"openstack/placement","branch":"master","topic":"story/2008750","hashtags":[],"change_id":"I1dda02d46cb019eedd6e3ef64e327ac85bb7c484","subject":"Correctly handle integrity errors on MySQL 8.x","status":"MERGED","created":"2021-03-25 12:06:42.000000000","updated":"2021-04-20 14:21:09.000000000","submitted":"2021-04-20 14:19:44.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":3,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"782988-story/2008750","meta_rev_id":"e4857078b472d00439602a2b65131a6e11811c18","_number":782988,"virtual_id_number":782988,"owner":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"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":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2021-04-20 14:19:43.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":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"all":[{"value":2,"date":"2021-04-17 20:24:24.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":2,"date":"2021-04-20 11:23:44.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"_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":"","default_value":0,"optional":true},"Workflow":{"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":1,"date":"2021-04-20 11:23:44.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,"_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},"Review-Priority":{"all":[{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"value":0,"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"}],"reviewers":{"REVIEWER":[{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2021-03-25 12:11:27.000000000","updated_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"reviewer":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"state":"REVIEWER"},{"updated":"2021-03-25 12:11:27.000000000","updated_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"reviewer":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"state":"REVIEWER"},{"updated":"2021-03-25 12:11:27.000000000","updated_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"reviewer":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"state":"REVIEWER"},{"updated":"2021-03-25 13:35:58.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"}],"messages":[{"id":"94c8d1218987336ee77a09abca391a99497f15ea","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2021-03-25 12:06:42.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"afdbcdea73497c76647c82eb33dbc0a406289377","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-03-25 13:35:58.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/5a36e37ab39a49638d3ccc65c3919883 : SUCCESS in 1h 07m 08s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/dd3d3c7fd80846a482fcb501945f0eb8 : SUCCESS in 1h 12m 31s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/3408fe1db64d491690b20d9a16306fda : SUCCESS in 8m 22s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/2fe72300f1f44b768013c8d828c8b2c8 : SUCCESS in 9m 54s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/bee5be4995964ef99c917979a5a2423b : SUCCESS in 6m 59s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/a1033b2662b344d5a9a28bbbace4a5b8 : SUCCESS in 7m 00s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/cc4f06cfcb204710bc375fd5bbc6b7bd : SUCCESS in 8m 27s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/5c3dd991327743f4bb9dd56bbfe41292 : SUCCESS in 9m 37s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8428e909a0f8445db1f8a6f925ad406b : SUCCESS in 9m 59s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/4c7c9446ae964be7b7e3011b97c0030b : SUCCESS in 7m 41s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/ca619719c3f244e597219a3df1424f88 : SUCCESS in 8m 47s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/f7a5257999f44240be8cf4ed27c3b373 : SUCCESS in 9m 17s\n- openstack-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/af33b2e1e79a4ab683684bd985b67c0f : SUCCESS in 8m 07s (non-voting)\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/a90fc01d9dcf4f3086f440615c51ca92 : SUCCESS in 16m 04s\n- placement-nested-perfload https://zuul.opendev.org/t/openstack/build/f4c42c7e408542c0ad713a3eb0903893 : SUCCESS in 22m 48s (non-voting)\n- placement-perfload https://zuul.opendev.org/t/openstack/build/f817f4f343c241e598ffee05984afff5 : SUCCESS in 11m 57s (non-voting)\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/428571adad844534be403603ba19e25c : SUCCESS in 59m 25s","accounts_in_message":[],"_revision_number":1},{"id":"6d09917c103d74f6983efe8ab7876a8a8ccd54f1","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-03-25 19:49:18.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"d5d9adf37caba722dea286b998fe3cc505367f6d","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-03-26 02:18:58.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"1a228f040b4a043c078510c278d7dd6e486e4125","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2021-03-26 08:59:41.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"a80f8858d7e1d1020dddcaf80c9795034db6106d","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2021-04-17 20:24:24.000000000","message":"Patch Set 1: Code-Review+2\n\nLooks OK to me","accounts_in_message":[],"_revision_number":1},{"id":"42ac5c4fdd7337ca1282fdfa5c7b00c7523625fa","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2021-04-20 11:23:44.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1","accounts_in_message":[],"_revision_number":1},{"id":"e0963c76c528c29a238dc886a9eb7032ddaa0ce6","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-04-20 11:24:01.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"4912fd7576844d0df97a9f378f303dfbbfd06a96","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-04-20 14:19:43.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- grenade https://zuul.opendev.org/t/openstack/build/5c2e56f29bb94128ba5cc534a2be89ce : SUCCESS in 55m 42s\n- tempest-integrated-placement https://zuul.opendev.org/t/openstack/build/c4612319e2c044a39ad1c7c670e84dfc : SUCCESS in 58m 29s\n- openstack-tox-lower-constraints https://zuul.opendev.org/t/openstack/build/3723ebd655534963ad4b9303ae80c39e : SUCCESS in 9m 20s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/6006e074fc0540e1be16976c7deb2c15 : SUCCESS in 7m 39s\n- openstack-tox-py36 https://zuul.opendev.org/t/openstack/build/0ef731d8f2864c3cb489d7473b2408fc : SUCCESS in 8m 11s\n- openstack-tox-py38 https://zuul.opendev.org/t/openstack/build/04290f54df524fe8a264dcb9e592350f : SUCCESS in 4m 58s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/85e849b4204b456b809cef8621b45d9c : SUCCESS in 11m 59s\n- openstack-tox-functional-py36 https://zuul.opendev.org/t/openstack/build/5a9daaff4de54062a298757c77d309b1 : SUCCESS in 7m 57s\n- openstack-tox-functional-py37 https://zuul.opendev.org/t/openstack/build/7bd777891a0d430cbf99aa0c94437bf5 : SUCCESS in 8m 25s\n- openstack-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/2278ec4d43d344508b44dfc0689ddbdd : SUCCESS in 6m 47s\n- placement-nova-tox-functional-py38 https://zuul.opendev.org/t/openstack/build/54c4f9c6e975467a9c359c51df402f21 : SUCCESS in 16m 31s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/a81faf07272e4acaa6b5a5b20baba8b4 : SUCCESS in 54m 58s","accounts_in_message":[],"_revision_number":1},{"id":"da64a3b033be372ccbca421220162a754ea1122a","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-04-20 14:19:44.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":1},{"id":"e4857078b472d00439602a2b65131a6e11811c18","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2021-04-20 14:21:09.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/8bf7be68fb90495baa42b337db891417 : SUCCESS in 1m 00s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"ba8228eb048f8be442aa16a8ffec291794b22430","revisions":{"ba8228eb048f8be442aa16a8ffec291794b22430":{"kind":"REWORK","_number":1,"created":"2021-03-25 12:06:42.000000000","uploader":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"ref":"refs/changes/88/782988/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/88/782988/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/782988/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/782988/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/782988/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/88/782988/1"}}},"commit":{"parents":[{"commit":"f41599e1ada2dfc7900817b09b623422d9d1dbe9","subject":"Update traits in tests and requirements","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/f41599e1ada2dfc7900817b09b623422d9d1dbe9"}]}],"author":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2021-03-25 11:35:41.000000000","tz":0},"committer":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2021-03-25 12:06:24.000000000","tz":0},"subject":"Correctly handle integrity errors on MySQL 8.x","message":"Correctly handle integrity errors on MySQL 8.x\n\nWe attempt to parse the \u0027DBDuplicateEntry\u0027 exceptions raised by oslo.db\nin the event of an integrity error to provide more useful information to\nthe user about what they did wrong. To do that, we\u0027re looking at the\n\u0027columns\u0027 attribute of this exception, which should list the conflicting\ncolumn(s), and extracting entries from the user-provided data based on\nthese columns names. However, on MySQL 8.x this does not return a column\nname but rather a constraint name. This results in a KeyError when we\nattempt to show the offending data by pulling it out by \"column\" name.\nFor example:\n\n  KeyError: \u0027resource_providers.uniq_resource_providers0name\u0027\n\nThe solution is simple. Since there are only two unique constraints for\nthe \u0027ResourceProvider\u0027 model, we can simply check for these and map them\nto their corresponding columns if found. The existing code can be\nretained as a fallback for other database backends and legacy MySQL\nversions.\n\nChange-Id: I1dda02d46cb019eedd6e3ef64e327ac85bb7c484\nSigned-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e\nStory: 2008750\nTask: 42110\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ba8228eb048f8be442aa16a8ffec291794b22430"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ba8228eb048f8be442aa16a8ffec291794b22430"}]},"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":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"}},{"label":"Workflow","status":"OK","applied_by":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"}}]}],"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":{}}}]}
