)]}'
{"id":"openstack%2Fplacement~673788","triplet_id":"openstack%2Fplacement~master~I1e1522eae7b4360cf57c34164612ae228fad14a3","project":"openstack/placement","branch":"master","topic":"cd/de-tuple","hashtags":[],"change_id":"I1e1522eae7b4360cf57c34164612ae228fad14a3","subject":"Remove ProviderIds namedtuple","status":"MERGED","created":"2019-07-31 11:41:17.000000000","updated":"2019-08-02 05:34:40.000000000","submitted":"2019-08-02 05:34:40.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"673788-1564724080178-3342d8ab","meta_rev_id":"5759355c937c468a1158ed9612c9c5aeafdea94b","_number":673788,"virtual_id_number":673788,"owner":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":2,"date":"2019-08-02 05:34:39.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"}],"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":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"all":[{"value":2,"date":"2019-08-01 21:48:40.000000000","_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"}],"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":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"all":[{"value":1,"date":"2019-08-01 21:48:40.000000000","_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2019-08-01 15:28:03.000000000","updated_by":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"reviewer":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"state":"REVIEWER"},{"updated":"2019-08-01 21:48:40.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":"2019-08-02 05:34:39.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":"b89ba9dfffcf8c2bd44d72db0139e8939b8b7678","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-31 11:41:17.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"9f72d8040586d075ab73ad815e0a5b6e2c1a0e72","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-31 14:22:08.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/88/673788/1/check/grenade-py3/e97e9e8/ : SUCCESS in 1h 02m 38s\n- tempest-integrated-placement http://logs.openstack.org/88/673788/1/check/tempest-integrated-placement/74d5856/ : SUCCESS in 1h 29m 08s\n- openstack-tox-docs http://logs.openstack.org/88/673788/1/check/openstack-tox-docs/daf8f1d/html/ : SUCCESS in 4m 20s\n- openstack-tox-cover http://logs.openstack.org/88/673788/1/check/openstack-tox-cover/008d59f/cover/ : SUCCESS in 5m 47s\n- openstack-tox-lower-constraints http://logs.openstack.org/88/673788/1/check/openstack-tox-lower-constraints/b2651a7/ : SUCCESS in 4m 40s\n- openstack-tox-pep8 http://logs.openstack.org/88/673788/1/check/openstack-tox-pep8/0273af5/ : SUCCESS in 3m 48s\n- openstack-tox-py27 http://logs.openstack.org/88/673788/1/check/openstack-tox-py27/373b4a1/ : SUCCESS in 5m 54s\n- openstack-tox-py36 http://logs.openstack.org/88/673788/1/check/openstack-tox-py36/4a141d2/ : SUCCESS in 3m 55s\n- openstack-tox-py37 http://logs.openstack.org/88/673788/1/check/openstack-tox-py37/8231e72/ : SUCCESS in 5m 42s\n- openstack-tox-functional http://logs.openstack.org/88/673788/1/check/openstack-tox-functional/dff2496/ : SUCCESS in 7m 00s\n- openstack-tox-functional-py36 http://logs.openstack.org/88/673788/1/check/openstack-tox-functional-py36/2be0c2f/ : SUCCESS in 5m 11s\n- openstack-tox-functional-py37 http://logs.openstack.org/88/673788/1/check/openstack-tox-functional-py37/242f807/ : SUCCESS in 6m 47s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/88/673788/1/check/placement-nova-tox-functional-py37/94e6000/ : SUCCESS in 11m 21s\n- placement-nested-perfload http://logs.openstack.org/88/673788/1/check/placement-nested-perfload/da58dad/ : SUCCESS in 19m 43s (non-voting)\n- placement-perfload http://logs.openstack.org/88/673788/1/check/placement-perfload/fc3271c/ : SUCCESS in 7m 54s (non-voting)\n- tempest-ipv6-only http://logs.openstack.org/88/673788/1/check/tempest-ipv6-only/7d32b65/ : SUCCESS in 1h 10m 25s","accounts_in_message":[],"_revision_number":1},{"id":"71c81e12e3767e298702233e5f466e72cfecc6ab","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-31 14:39:54.000000000","message":"Patch Set 1: Code-Review+2\n\nHmph.\n\nI don\u0027t like the thought of explicitly exposing a sqla object up the stack like this. It feels like it breaks a principle of abstraction. But it clearly works, and if it\u0027s more performant...","accounts_in_message":[],"_revision_number":1},{"id":"9cb887d7ed2ffc870ad3423340d6856af87cd750","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-31 14:45:03.000000000","message":"Patch Set 1:\n\n\u003e I don\u0027t like the thought of explicitly exposing a sqla object up\n \u003e the stack like this.\n\nThat\u0027s _exactly_ what sqla is for. It provides abstractions around the sql queries. So what we were doing here was needlessly wrapping an abstraction around an abstraction that was already doing the job we wanted.\n\nOn top of that: within the \u0027objects\u0027 package we are (at least for now) fully committed to sqla, so...\n\nIf we didn\u0027t have that commitment we\u0027d probably have a lot more to debate here, but ...","accounts_in_message":[],"_revision_number":1},{"id":"f678854332b26e475b7029d3ee455a20e6c11ac1","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-08-01 15:10:19.000000000","message":"Patch Set 1:\n\n(4 comments)","accounts_in_message":[],"_revision_number":1},{"id":"8d56c03385cf355c5d8af60adf59e6e1d6947f34","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-08-01 15:26:32.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"50f8df2061bbe0c0acc9713d1144c8832fa5420a","author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"date":"2019-08-01 15:28:03.000000000","message":"Patch Set 2: Code-Review+2 Workflow+1\n\nLGTM, simple nit tweaks in PS2 and efried was +2 on PS1 so fast approving.","accounts_in_message":[],"_revision_number":2},{"id":"36bfa64e823ec6e06afa552a4788f48158f02c8e","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-08-01 21:48:09.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"61c86a93683a9a34abe445d814381561b6abf42e","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-08-01 21:48:40.000000000","message":"Patch Set 3: Code-Review+2 Workflow+1\n\nI just fixed pep8","accounts_in_message":[],"_revision_number":3},{"id":"bfc7133be862ac59a6a7bca4e456b07880f07f9a","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-02 02:56:21.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 https://logs.opendev.org/88/673788/3/check/grenade-py3/c0e6c5d/ : SUCCESS in 1h 09m 50s\n- tempest-integrated-placement https://logs.opendev.org/88/673788/3/check/tempest-integrated-placement/f065476/ : SUCCESS in 1h 21m 51s\n- openstack-tox-docs https://logs.opendev.org/88/673788/3/check/openstack-tox-docs/d554b4d/html/ : SUCCESS in 3m 41s\n- openstack-tox-cover https://logs.opendev.org/88/673788/3/check/openstack-tox-cover/a6c9c7b/cover/ : SUCCESS in 6m 26s\n- openstack-tox-lower-constraints https://logs.opendev.org/88/673788/3/check/openstack-tox-lower-constraints/bc42644/ : SUCCESS in 4m 57s\n- openstack-tox-pep8 https://logs.opendev.org/88/673788/3/check/openstack-tox-pep8/8c0f932/ : SUCCESS in 4m 11s\n- openstack-tox-py27 https://logs.opendev.org/88/673788/3/check/openstack-tox-py27/8183b05/ : SUCCESS in 4m 12s\n- openstack-tox-py36 https://logs.opendev.org/88/673788/3/check/openstack-tox-py36/368d5fc/ : SUCCESS in 5m 09s\n- openstack-tox-py37 https://logs.opendev.org/88/673788/3/check/openstack-tox-py37/f610e83/ : SUCCESS in 4m 57s\n- openstack-tox-functional https://logs.opendev.org/88/673788/3/check/openstack-tox-functional/45f3944/ : SUCCESS in 6m 13s\n- openstack-tox-functional-py36 https://logs.opendev.org/88/673788/3/check/openstack-tox-functional-py36/ba65872/ : SUCCESS in 5m 36s\n- openstack-tox-functional-py37 https://logs.opendev.org/88/673788/3/check/openstack-tox-functional-py37/4798c1c/ : SUCCESS in 7m 19s\n- placement-nova-tox-functional-py37 https://logs.opendev.org/88/673788/3/check/placement-nova-tox-functional-py37/9898b5b/ : SUCCESS in 13m 35s\n- placement-nested-perfload https://logs.opendev.org/88/673788/3/check/placement-nested-perfload/4b65a1e/ : SUCCESS in 17m 13s (non-voting)\n- placement-perfload https://logs.opendev.org/88/673788/3/check/placement-perfload/01e9ea7/ : SUCCESS in 8m 35s (non-voting)\n- tempest-ipv6-only https://logs.opendev.org/88/673788/3/check/tempest-ipv6-only/80ced97/ : SUCCESS in 1h 00m 50s","accounts_in_message":[],"_revision_number":3},{"id":"8cf24b6de17a2126b7dd050f2f3ff0fd2377abe3","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-02 02:57:39.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"36c1711fae677b695d8ee90fc1d5a2a48cf82cc7","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-02 05:34:39.000000000","message":"Patch Set 3: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- grenade-py3 https://logs.opendev.org/88/673788/3/gate/grenade-py3/8a216d7/ : SUCCESS in 59m 24s\n- tempest-integrated-placement https://logs.opendev.org/88/673788/3/gate/tempest-integrated-placement/d106869/ : SUCCESS in 1h 15m 29s\n- openstack-tox-docs https://logs.opendev.org/88/673788/3/gate/openstack-tox-docs/37942e8/html/ : SUCCESS in 4m 21s\n- openstack-tox-lower-constraints https://logs.opendev.org/88/673788/3/gate/openstack-tox-lower-constraints/d8df31a/ : SUCCESS in 5m 16s\n- openstack-tox-pep8 https://logs.opendev.org/88/673788/3/gate/openstack-tox-pep8/85cfe35/ : SUCCESS in 3m 54s\n- openstack-tox-py27 https://logs.opendev.org/88/673788/3/gate/openstack-tox-py27/719ba56/ : SUCCESS in 5m 00s\n- openstack-tox-py36 https://logs.opendev.org/88/673788/3/gate/openstack-tox-py36/a8554f6/ : SUCCESS in 4m 33s\n- openstack-tox-py37 https://logs.opendev.org/88/673788/3/gate/openstack-tox-py37/946d44b/ : SUCCESS in 5m 35s\n- openstack-tox-functional https://logs.opendev.org/88/673788/3/gate/openstack-tox-functional/f9a8a29/ : SUCCESS in 5m 01s\n- openstack-tox-functional-py36 https://logs.opendev.org/88/673788/3/gate/openstack-tox-functional-py36/6aee359/ : SUCCESS in 5m 36s\n- openstack-tox-functional-py37 https://logs.opendev.org/88/673788/3/gate/openstack-tox-functional-py37/55d5c04/ : SUCCESS in 5m 23s\n- placement-nova-tox-functional-py37 https://logs.opendev.org/88/673788/3/gate/placement-nova-tox-functional-py37/06b1575/ : SUCCESS in 11m 36s\n- tempest-ipv6-only https://logs.opendev.org/88/673788/3/gate/tempest-ipv6-only/71c13ab/ : SUCCESS in 1h 03m 43s","accounts_in_message":[],"_revision_number":3},{"id":"31f7467fc442e712c98a2897fffa8a9ac682ac13","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-08-02 05:34:40.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"8626b6517b8e975fbcbd59842b9316608886b6c7","revisions":{"bb91e84d26f77a768ea3cfd3750451b76035aba7":{"kind":"REWORK","_number":1,"created":"2019-07-31 11:41:17.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/88/673788/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/88/673788/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/88/673788/1"}}},"commit":{"parents":[{"commit":"541052ad5edcdd6328f59d71d94b0ae39879d74a","subject":"Merge \"Extra gabbi tests for same_subtree\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/541052ad5edcdd6328f59d71d94b0ae39879d74a"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-31 11:34:30.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-31 11:34:30.000000000","tz":60},"subject":"Remove ProviderIds namedtuple","message":"Remove ProviderIds namedtuple\n\nIt turns out that all the callers of methods that return ProviderIds\naccess the data using attributes that are already present on the object\nprovided by the sql alchemy RowProxy object. Creating a namedtuple is\nredundant and adds some processing cost [1].\n\nHowever, the AnchorIds namedtuple used in the same file _is_ necessary\nbecause it provides a hashable type required by the set that wraps\nthe collection of AnchorIds.\n\nThe other user of namedtuple, RPCandidate, in\nplacement/objects/rp_candidates.py has a specific interface for which\na namedtuple is correct.\n\n[1] provider_ids_from_rp_ids was identified as being a major contributor\nwhen doing performance profiling. Most of the cost is executing with the\ndatabase, but the tuple creation is a factor.\n\nChange-Id: I1e1522eae7b4360cf57c34164612ae228fad14a3\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/bb91e84d26f77a768ea3cfd3750451b76035aba7"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/bb91e84d26f77a768ea3cfd3750451b76035aba7"}]},"branch":"refs/heads/master"},"ffba5fac0d157214150c7a71e487478997725bb7":{"kind":"REWORK","_number":2,"created":"2019-08-01 15:26:32.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/88/673788/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/88/673788/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/88/673788/2"}}},"commit":{"parents":[{"commit":"835081ac363a122153323df26c173ddee305801c","subject":"Blacklist sphinx 2.1.0 (autodoc bug)","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/835081ac363a122153323df26c173ddee305801c"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-31 11:34:30.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-08-01 15:22:37.000000000","tz":60},"subject":"Remove ProviderIds namedtuple","message":"Remove ProviderIds namedtuple\n\nIt turns out that all the callers of methods that return ProviderIds\naccess the data using attributes that are already present on the object\nprovided by a sql alchemy RowProxy object (which is the result of\niterating a ResultProxy object, returned by sqla.execute()). Creating\na namedtuple is redundant and adds some processing cost [1].\n\nHowever, the AnchorIds namedtuple used in the same file _is_ necessary\nbecause it provides a hashable type required by the set that wraps\nthe collection of AnchorIds.\n\nThe other user of namedtuple, RPCandidate, in\nplacement/objects/rp_candidates.py has a specific interface for which\na namedtuple is correct.\n\n[1] provider_ids_from_rp_ids was identified as being a major contributor\nwhen doing performance profiling. Most of the cost is executing with the\ndatabase, but the tuple creation is a factor.\n\nChange-Id: I1e1522eae7b4360cf57c34164612ae228fad14a3\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ffba5fac0d157214150c7a71e487478997725bb7"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/ffba5fac0d157214150c7a71e487478997725bb7"}]},"branch":"refs/heads/master"},"8626b6517b8e975fbcbd59842b9316608886b6c7":{"kind":"REWORK","_number":3,"created":"2019-08-01 21:48:09.000000000","uploader":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"ref":"refs/changes/88/673788/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/88/673788/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/88/673788/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/88/673788/3"}}},"commit":{"parents":[{"commit":"d04168088c20ea8b0e8bc43e661085b7d5e80374","subject":"Bump os-traits minimum to 0.16.0","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/d04168088c20ea8b0e8bc43e661085b7d5e80374"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-31 11:34:30.000000000","tz":60},"committer":{"name":"Eric Fried","email":"openstack@fried.cc","date":"2019-08-01 21:48:02.000000000","tz":-300},"subject":"Remove ProviderIds namedtuple","message":"Remove ProviderIds namedtuple\n\nIt turns out that all the callers of methods that return ProviderIds\naccess the data using attributes that are already present on the object\nprovided by a sql alchemy RowProxy object (which is the result of\niterating a ResultProxy object, returned by sqla.execute()). Creating\na namedtuple is redundant and adds some processing cost [1].\n\nHowever, the AnchorIds namedtuple used in the same file _is_ necessary\nbecause it provides a hashable type required by the set that wraps\nthe collection of AnchorIds.\n\nThe other user of namedtuple, RPCandidate, in\nplacement/objects/rp_candidates.py has a specific interface for which\na namedtuple is correct.\n\n[1] provider_ids_from_rp_ids was identified as being a major contributor\nwhen doing performance profiling. Most of the cost is executing with the\ndatabase, but the tuple creation is a factor.\n\nChange-Id: I1e1522eae7b4360cf57c34164612ae228fad14a3\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8626b6517b8e975fbcbd59842b9316608886b6c7"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/8626b6517b8e975fbcbd59842b9316608886b6c7"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
