)]}'
{"id":"openstack%2Fplacement~671341","triplet_id":"openstack%2Fplacement~master~I409a5e819a72d64e66ee390e4528da0c503d8d05","project":"openstack/placement","branch":"master","topic":"story/2006232","hashtags":[],"change_id":"I409a5e819a72d64e66ee390e4528da0c503d8d05","subject":"Move rc_cache onto RequestContext","status":"MERGED","created":"2019-07-17 17:42:33.000000000","updated":"2019-07-19 00:26:22.000000000","submitted":"2019-07-19 00:26:22.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":6,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"671341-1563495982231-0ae53db0","meta_rev_id":"f28cf71c346f23c8147193bc78f35b62a36af8bd","_number":671341,"virtual_id_number":671341,"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":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"date":"2019-07-18 18:28:57.000000000","_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"value":2,"date":"2019-07-19 00:26:22.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":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"all":[{"value":2,"date":"2019-07-18 13:51:37.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":2,"date":"2019-07-18 11:22:31.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":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"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":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":1,"date":"2019-07-18 11:22:31.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":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"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":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"value":0,"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"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":[],"reviewers":{"REVIEWER":[{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},{"_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-07-18 11:22:31.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":"2019-07-18 13:51:37.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-07-19 00:26:22.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":"379d4bb22f22aa0efa950194f6d80765b4d1abea","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-17 17:42:33.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"88efcc75fedf8909ca312e286c325b2c685e0f3e","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-17 17:56:30.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"dfff1c4d5fa4df4386620f24d20d462ee5dc7340","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-17 19:19:13.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/41/671341/1/check/grenade-py3/ad99932/ : SUCCESS in 1h 04m 11s\n- tempest-full-py3 http://logs.openstack.org/41/671341/1/check/tempest-full-py3/a3497a5/ : SUCCESS in 1h 29m 57s\n- openstack-tox-docs http://logs.openstack.org/41/671341/1/check/openstack-tox-docs/a00131a/html/ : SUCCESS in 4m 51s\n- openstack-tox-cover http://logs.openstack.org/41/671341/1/check/openstack-tox-cover/3b2b147/cover/ : SUCCESS in 5m 26s\n- openstack-tox-lower-constraints http://logs.openstack.org/41/671341/1/check/openstack-tox-lower-constraints/4a63fc2/ : SUCCESS in 5m 58s\n- openstack-tox-pep8 http://logs.openstack.org/41/671341/1/check/openstack-tox-pep8/f01e04c/ : SUCCESS in 4m 15s\n- openstack-tox-py27 http://logs.openstack.org/41/671341/1/check/openstack-tox-py27/d982f32/ : SUCCESS in 5m 41s\n- openstack-tox-py36 http://logs.openstack.org/41/671341/1/check/openstack-tox-py36/3363f95/ : SUCCESS in 4m 14s\n- openstack-tox-py37 http://logs.openstack.org/41/671341/1/check/openstack-tox-py37/06da1b8/ : SUCCESS in 4m 59s\n- openstack-tox-functional http://logs.openstack.org/41/671341/1/check/openstack-tox-functional/2226b89/ : SUCCESS in 4m 50s\n- openstack-tox-functional-py36 http://logs.openstack.org/41/671341/1/check/openstack-tox-functional-py36/585110a/ : SUCCESS in 4m 54s\n- openstack-tox-functional-py37 http://logs.openstack.org/41/671341/1/check/openstack-tox-functional-py37/a113515/ : SUCCESS in 5m 26s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/41/671341/1/check/placement-nova-tox-functional-py37/acf0675/ : SUCCESS in 11m 46s\n- placement-nested-perfload http://logs.openstack.org/41/671341/1/check/placement-nested-perfload/2ef7a4d/ : SUCCESS in 17m 33s (non-voting)\n- placement-perfload http://logs.openstack.org/41/671341/1/check/placement-perfload/9ef2f72/ : SUCCESS in 6m 30s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"05aa27977a48e3beae7fc6394d350f70162b662e","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-17 22:44:37.000000000","message":"Patch Set 1: Code-Review+2\n\n(3 comments)\n\nThis works for me. Some simplification is possible in the fixture, but it\u0027s not hurting anything as is.","accounts_in_message":[],"_revision_number":1},{"id":"28c7b7a89d50ed8c56a4bd99991cc08055503da1","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-18 07:54:19.000000000","message":"Patch Set 1: Workflow-1\n\n(2 comments)\n\nwill do the mock cleanup","accounts_in_message":[],"_revision_number":1},{"id":"944b0015eb36f4fe0b3629b42e6e8554b414cb35","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2019-07-18 08:07:15.000000000","message":"Patch Set 1: Code-Review+2\n\nLooks good. I think removing a global and removing a lock could even help the performance in a highly threaded environment.","accounts_in_message":[],"_revision_number":1},{"id":"6b2111fcc6e53bcc3b1a419e1ae9b37129134414","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-18 10:05:02.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"19f171f0e2a8ad8e80e62a3ecbaafdc83a1e5b22","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2019-07-18 11:22:31.000000000","message":"Patch Set 2: Code-Review+2 Workflow+1\n\nEric\u0027s was +2 before and his comment was fixed so I\u0027m fast approving this.","accounts_in_message":[],"_revision_number":2},{"id":"61e11b447d95d35ce1b826b62b6d725fa53c0aaa","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-18 11:46:04.000000000","message":"Patch Set 2: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- grenade-py3 http://logs.openstack.org/41/671341/2/check/grenade-py3/396c07f/ : SUCCESS in 59m 25s\n- tempest-full-py3 http://logs.openstack.org/41/671341/2/check/tempest-full-py3/c055791/ : SUCCESS in 1h 27m 28s\n- openstack-tox-docs http://logs.openstack.org/41/671341/2/check/openstack-tox-docs/ae5456f/html/ : SUCCESS in 5m 19s\n- openstack-tox-cover http://logs.openstack.org/41/671341/2/check/openstack-tox-cover/b5d11a6/ : FAILURE in 6m 01s\n- openstack-tox-lower-constraints http://logs.openstack.org/41/671341/2/check/openstack-tox-lower-constraints/426609d/ : SUCCESS in 4m 51s\n- openstack-tox-pep8 http://logs.openstack.org/41/671341/2/check/openstack-tox-pep8/f1a143c/ : SUCCESS in 4m 00s\n- openstack-tox-py27 http://logs.openstack.org/41/671341/2/check/openstack-tox-py27/00098bc/ : SUCCESS in 4m 14s\n- openstack-tox-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-py36/965abcd/ : SUCCESS in 5m 05s\n- openstack-tox-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-py37/b4f92c5/ : SUCCESS in 5m 51s\n- openstack-tox-functional http://logs.openstack.org/41/671341/2/check/openstack-tox-functional/29a2029/ : FAILURE in 4m 52s\n- openstack-tox-functional-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py36/9cc799d/ : FAILURE in 4m 59s\n- openstack-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py37/d2f02f9/ : FAILURE in 5m 54s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/placement-nova-tox-functional-py37/40556d1/ : SUCCESS in 10m 44s\n- placement-nested-perfload http://logs.openstack.org/41/671341/2/check/placement-nested-perfload/a2e49b8/ : SUCCESS in 17m 27s (non-voting)\n- placement-perfload http://logs.openstack.org/41/671341/2/check/placement-perfload/e1f516f/ : SUCCESS in 7m 34s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"b4cabcab465405db441dbab4c0b727a6a01bdfed","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-18 12:16:57.000000000","message":"Patch Set 2:\n\nthese failures are because we\u0027ve got a new os-resources-classes, I\u0027ll make the canary and then once that has merged we can recheck this","accounts_in_message":[],"_revision_number":2},{"id":"df5cd2b2b39982d7c4ab52d7ee8dba3dc3462ca1","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-18 13:51:37.000000000","message":"Patch Set 2: Code-Review+2","accounts_in_message":[],"_revision_number":2},{"id":"14e8bf63539d1a1550861afc972731b5b41b70e6","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-18 18:28:57.000000000","message":"Patch Set 2:\n\nrecheck","accounts_in_message":[],"_revision_number":2},{"id":"e22eb03e24ae8de310ec0a3f2a034c8cf3192895","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-18 20:44:05.000000000","message":"Patch Set 2:\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttp://docs.openstack.org/infra/manual/developers.html#automated-testing\n\n\n- grenade-py3 http://logs.openstack.org/41/671341/2/check/grenade-py3/95c225c/ : SUCCESS in 1h 03m 42s\n- tempest-full-py3 http://logs.openstack.org/41/671341/2/check/tempest-full-py3/242db1f/ : TIMED_OUT in 2h 08m 06s\n- openstack-tox-docs http://logs.openstack.org/41/671341/2/check/openstack-tox-docs/17da61c/html/ : SUCCESS in 5m 15s\n- openstack-tox-cover http://logs.openstack.org/41/671341/2/check/openstack-tox-cover/f33ff13/cover/ : SUCCESS in 5m 54s\n- openstack-tox-lower-constraints http://logs.openstack.org/41/671341/2/check/openstack-tox-lower-constraints/a05eed2/ : SUCCESS in 7m 48s\n- openstack-tox-pep8 http://logs.openstack.org/41/671341/2/check/openstack-tox-pep8/932edb4/ : SUCCESS in 6m 07s\n- openstack-tox-py27 http://logs.openstack.org/41/671341/2/check/openstack-tox-py27/f4fb3f3/ : SUCCESS in 3m 57s\n- openstack-tox-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-py36/896eeab/ : SUCCESS in 5m 47s\n- openstack-tox-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-py37/e577663/ : SUCCESS in 6m 22s\n- openstack-tox-functional http://logs.openstack.org/41/671341/2/check/openstack-tox-functional/2bb0a9f/ : SUCCESS in 6m 02s\n- openstack-tox-functional-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py36/e316a2b/ : SUCCESS in 6m 24s\n- openstack-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py37/c235208/ : SUCCESS in 5m 51s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/placement-nova-tox-functional-py37/022ca59/ : SUCCESS in 13m 21s\n- placement-nested-perfload http://logs.openstack.org/41/671341/2/check/placement-nested-perfload/6c9e884/ : SUCCESS in 17m 27s (non-voting)\n- placement-perfload http://logs.openstack.org/41/671341/2/check/placement-perfload/8c75397/ : SUCCESS in 8m 31s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"ece9d0b8997a8628792e12d4981227d02ef181f2","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-18 20:58:33.000000000","message":"Patch Set 2:\n\nrecheck timeout","accounts_in_message":[],"_revision_number":2},{"id":"9e4cca774495eb6ea6e591e6b6e94d9bcb0fec4d","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-18 22:45:12.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/41/671341/2/check/grenade-py3/aa3b120/ : SUCCESS in 1h 02m 23s\n- tempest-full-py3 http://logs.openstack.org/41/671341/2/check/tempest-full-py3/3fae4fa/ : SUCCESS in 1h 34m 32s\n- openstack-tox-docs http://logs.openstack.org/41/671341/2/check/openstack-tox-docs/24da317/html/ : SUCCESS in 6m 47s\n- openstack-tox-cover http://logs.openstack.org/41/671341/2/check/openstack-tox-cover/d99bc8a/cover/ : SUCCESS in 7m 13s\n- openstack-tox-lower-constraints http://logs.openstack.org/41/671341/2/check/openstack-tox-lower-constraints/a9cfdd5/ : SUCCESS in 8m 43s\n- openstack-tox-pep8 http://logs.openstack.org/41/671341/2/check/openstack-tox-pep8/b6710e4/ : SUCCESS in 6m 23s\n- openstack-tox-py27 http://logs.openstack.org/41/671341/2/check/openstack-tox-py27/4272f3f/ : SUCCESS in 5m 31s\n- openstack-tox-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-py36/3adc69c/ : SUCCESS in 6m 23s\n- openstack-tox-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-py37/5f90238/ : SUCCESS in 5m 54s\n- openstack-tox-functional http://logs.openstack.org/41/671341/2/check/openstack-tox-functional/408db4f/ : SUCCESS in 6m 53s\n- openstack-tox-functional-py36 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py36/a103d69/ : SUCCESS in 5m 37s\n- openstack-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/openstack-tox-functional-py37/25898dd/ : SUCCESS in 7m 35s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/41/671341/2/check/placement-nova-tox-functional-py37/1e1570d/ : SUCCESS in 12m 38s\n- placement-nested-perfload http://logs.openstack.org/41/671341/2/check/placement-nested-perfload/89e75e6/ : SUCCESS in 19m 51s (non-voting)\n- placement-perfload http://logs.openstack.org/41/671341/2/check/placement-perfload/c7e1377/ : SUCCESS in 7m 14s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"708f328fdc8c82d934df3bc799978936bc21751d","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-18 22:45:23.000000000","message":"Patch Set 2: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":2},{"id":"1a778b7f29f96783ffc0a8b03560560becdc55fb","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-19 00:26:22.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":2},{"id":"0aebfd6a6498586a99286a6c907aedd400e6e761","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-19 00:26:22.000000000","message":"Patch Set 2: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- grenade-py3 http://logs.openstack.org/41/671341/2/gate/grenade-py3/833ab1c/ : SUCCESS in 59m 21s\n- tempest-full-py3 http://logs.openstack.org/41/671341/2/gate/tempest-full-py3/e5551c3/ : SUCCESS in 1h 24m 38s\n- openstack-tox-docs http://logs.openstack.org/41/671341/2/gate/openstack-tox-docs/70c8065/html/ : SUCCESS in 4m 55s\n- openstack-tox-lower-constraints http://logs.openstack.org/41/671341/2/gate/openstack-tox-lower-constraints/d54714f/ : SUCCESS in 5m 40s\n- openstack-tox-pep8 http://logs.openstack.org/41/671341/2/gate/openstack-tox-pep8/7148884/ : SUCCESS in 5m 18s\n- openstack-tox-py27 http://logs.openstack.org/41/671341/2/gate/openstack-tox-py27/6ec4474/ : SUCCESS in 5m 33s\n- openstack-tox-py36 http://logs.openstack.org/41/671341/2/gate/openstack-tox-py36/098544d/ : SUCCESS in 4m 59s\n- openstack-tox-py37 http://logs.openstack.org/41/671341/2/gate/openstack-tox-py37/5acad35/ : SUCCESS in 6m 41s\n- openstack-tox-functional http://logs.openstack.org/41/671341/2/gate/openstack-tox-functional/1ba8af3/ : SUCCESS in 7m 17s\n- openstack-tox-functional-py36 http://logs.openstack.org/41/671341/2/gate/openstack-tox-functional-py36/f3994e5/ : SUCCESS in 6m 59s\n- openstack-tox-functional-py37 http://logs.openstack.org/41/671341/2/gate/openstack-tox-functional-py37/5fbfa2a/ : SUCCESS in 6m 23s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/41/671341/2/gate/placement-nova-tox-functional-py37/158297f/ : SUCCESS in 12m 58s","accounts_in_message":[],"_revision_number":2}],"current_revision_number":2,"current_revision":"2fc321aea3dc2fdd36cb3d950a09bd87d07f7ebc","revisions":{"7ec9df3d5fc1220efec7af12cdd9e5eddb955e95":{"kind":"REWORK","_number":1,"created":"2019-07-17 17:42:33.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/41/671341/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/41/671341/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/41/671341/1"}}},"commit":{"parents":[{"commit":"3ba36fb7172ca8355fa29219bc8d0f0282cf834b","subject":"Merge \"Add Python 3 Train unit tests\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/3ba36fb7172ca8355fa29219bc8d0f0282cf834b"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-17 17:28:11.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-17 17:42:31.000000000","tz":60},"subject":"Move rc_cache onto RequestContext","message":"Move rc_cache onto RequestContext\n\nExperimentation led to the discovery (as described in the story\nnoted below) that the global RC_CACHE is not safe in a multi-process\nenvironment, which is common for a web service designed to scale\nhorizontally.\n\nIn rare circumstances it is possible for a custom resource class\nto be deleted in one process but still appear to exist in another.\nFor many situations this wouldn\u0027t really matter, but there are\ncases, even more rare, where it would be possible to write allocations\nor resource provider inventory using the wrong resource class\nid.\n\nOn the related story, a variety of options were discussed to fix\nthis. Reading through the code this one (which is option 2) was\nthe only one that proved workable in a relatively straightforward\nfashion: Have a per request cache.\n\nTo that end, when a RequestContext is created (per request) the\nresource class table is scanned to create a cache. Because the\ncontext is local to this request, we no longer need to do any\nlocking around the cache, either when we create it or when we clear\nit: The caller is linear.\n\nThe cost of this is that now every single request starts with a\nscan of the resource class table. This isn\u0027t horrible: if we\nhad no cache at all we\u0027d be reading rows from that table multiple\ntimes throughout any request (read or write).\n\nWe should probably do some performance analysis to see what the\nimpact of this might be. The perfload jobs may be able to give\na limited sense of what the impact is, but profiling will be\nrequired for accuracy.\n\nIt is the case that the functional tests seem a bit slower because\nof that additional db query.\n\nChange-Id: I409a5e819a72d64e66ee390e4528da0c503d8d05\nStory: 2006232\nTask: 35833\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7ec9df3d5fc1220efec7af12cdd9e5eddb955e95"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/7ec9df3d5fc1220efec7af12cdd9e5eddb955e95"}]},"branch":"refs/heads/master"},"2fc321aea3dc2fdd36cb3d950a09bd87d07f7ebc":{"kind":"REWORK","_number":2,"created":"2019-07-18 10:05:02.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/41/671341/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/41/671341/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/41/671341/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/41/671341/2"}}},"commit":{"parents":[{"commit":"3ba36fb7172ca8355fa29219bc8d0f0282cf834b","subject":"Merge \"Add Python 3 Train unit tests\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/3ba36fb7172ca8355fa29219bc8d0f0282cf834b"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-17 17:28:11.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-18 10:04:48.000000000","tz":60},"subject":"Move rc_cache onto RequestContext","message":"Move rc_cache onto RequestContext\n\nExperimentation led to the discovery (as described in the story\nnoted below) that the global RC_CACHE is not safe in a multi-process\nenvironment, which is common for a web service designed to scale\nhorizontally.\n\nIn rare circumstances it is possible for a custom resource class\nto be deleted in one process but still appear to exist in another.\nFor many situations this wouldn\u0027t really matter, but there are\ncases, even more rare, where it would be possible to write allocations\nor resource provider inventory using the wrong resource class\nid.\n\nOn the related story, a variety of options were discussed to fix\nthis. Reading through the code this one (which is option 2) was\nthe only one that proved workable in a relatively straightforward\nfashion: Have a per request cache.\n\nTo that end, when a RequestContext is created (per request) the\nresource class table is scanned to create a cache. Because the\ncontext is local to this request, we no longer need to do any\nlocking around the cache, either when we create it or when we clear\nit: The caller is linear.\n\nThe cost of this is that now every single request starts with a\nscan of the resource class table. This isn\u0027t horrible: if we\nhad no cache at all we\u0027d be reading rows from that table multiple\ntimes throughout any request (read or write).\n\nWe should probably do some performance analysis to see what the\nimpact of this might be. The perfload jobs may be able to give\na limited sense of what the impact is, but profiling will be\nrequired for accuracy.\n\nIt is the case that the functional tests seem a bit slower because\nof that additional db query.\n\nChange-Id: I409a5e819a72d64e66ee390e4528da0c503d8d05\nStory: 2006232\nTask: 35833\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2fc321aea3dc2fdd36cb3d950a09bd87d07f7ebc"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/2fc321aea3dc2fdd36cb3d950a09bd87d07f7ebc"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
