)]}'
{"id":"openstack%2Fplacement~672298","triplet_id":"openstack%2Fplacement~master~Ia19ea2b4ecdde25323579edf60ad6269d05e75a2","project":"openstack/placement","branch":"master","topic":"cd/no-traits","hashtags":[],"change_id":"Ia19ea2b4ecdde25323579edf60ad6269d05e75a2","subject":"Make a TraitCache similar to ResourceClassCache","status":"MERGED","created":"2019-07-23 14:25:12.000000000","updated":"2019-07-25 11:55:39.000000000","submitted":"2019-07-25 11:55:39.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":73,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"672298-1564055739850-c3a5ce02","meta_rev_id":"5327e8e574ba44c2b57dd91c752774ccd4d8b5d9","_number":672298,"virtual_id_number":672298,"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,"date":"2019-07-25 08:49:20.000000000","_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},{"value":2,"date":"2019-07-25 11:55:39.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},{"value":0,"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"}],"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":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"all":[{"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"]},{"value":2,"date":"2019-07-25 07:48:55.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},{"value":2,"date":"2019-07-24 14:21:22.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":1,"date":"2019-07-25 03:18:11.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"}],"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":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"all":[{"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"]},{"value":1,"date":"2019-07-25 07:48:55.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},{"value":0,"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"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"]},{"value":0,"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},{"value":0,"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},{"value":0,"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},{"_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-24 14:21:22.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-25 03:18:11.000000000","updated_by":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"reviewer":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"state":"REVIEWER"},{"updated":"2019-07-25 07:48:55.000000000","updated_by":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"reviewer":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"state":"REVIEWER"},{"updated":"2019-07-25 11:55: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":"f4852957944800ec4e85147e90001544a93382d5","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 14:25:12.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"ded6d0236e6c07b3349c8e0f784017da1d42351f","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 14:26:20.000000000","message":"Patch Set 1:\n\nI was going to post this as a POC but then it all came together so nicely...","accounts_in_message":[],"_revision_number":1},{"id":"c968a8a83e7bd7d306f8bcec2986fd54b2a01d33","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 14:35:47.000000000","message":"Patch Set 1:\n\n\u003e I was going to post this as a POC but then it all came together so\n \u003e nicely...\n\nit might, however, make sense to break it up some (assuming it is useful)","accounts_in_message":[],"_revision_number":1},{"id":"1379bdfacc75b60ec4564525b1d8f2e0742b11a1","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-23 15:58:15.000000000","message":"Patch Set 1:\n\n(29 comments)\n\nI think I\u0027ll wait to vote until we\u0027ve conversated a bit on the things noted inline. I recognize (now) that many of them should be done in subsequent patches to minimize the diff between the old resource_class_cache.py and the new attribute_cache.py.","accounts_in_message":[],"_revision_number":1},{"id":"abfa6d86022c1c480d28e143dce01b491c57dc0b","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 16:18:22.000000000","message":"Patch Set 1:\n\n(18 comments)\n\nGood suggestions. As you say, several of them are on existing code, but still valid. Additional responses within.\n\nI\u0027ll do another version soonish.","accounts_in_message":[],"_revision_number":1},{"id":"ac87ce9fc6a268507a048d69566d01463c20261c","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 16:46:25.000000000","message":"Patch Set 1: Workflow-1\n\nlooks like py27 is going to present some interesting failures","accounts_in_message":[],"_revision_number":1},{"id":"b6bee81b091809aa64bce66958d64db1df8c23e8","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 16:50:40.000000000","message":"Patch Set 1:\n\nah, it\u0027s output ordering there tests relying on database order which the cache kills","accounts_in_message":[],"_revision_number":1},{"id":"253b09cbe25e55f0c738ba4096db9fe6f25ed58d","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-23 17:37:53.000000000","message":"Patch Set 1: 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/98/672298/1/check/grenade-py3/8724959/ : SUCCESS in 1h 00m 15s\n- tempest-full-py3 http://logs.openstack.org/98/672298/1/check/tempest-full-py3/17f12e7/ : SUCCESS in 1h 32m 49s\n- openstack-tox-docs http://logs.openstack.org/98/672298/1/check/openstack-tox-docs/9e12103/html/ : SUCCESS in 5m 56s\n- openstack-tox-cover http://logs.openstack.org/98/672298/1/check/openstack-tox-cover/ec403a2/cover/ : SUCCESS in 5m 11s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/1/check/openstack-tox-lower-constraints/02c894d/ : SUCCESS in 5m 11s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/1/check/openstack-tox-pep8/cd8abdc/ : SUCCESS in 3m 58s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/1/check/openstack-tox-py27/e69fe02/ : SUCCESS in 3m 55s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/1/check/openstack-tox-py36/64fad79/ : SUCCESS in 5m 27s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/1/check/openstack-tox-py37/2edbb6a/ : SUCCESS in 7m 09s\n- openstack-tox-functional http://logs.openstack.org/98/672298/1/check/openstack-tox-functional/6dbcf1d/ : FAILURE in 5m 32s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/1/check/openstack-tox-functional-py36/ef77fc4/ : SUCCESS in 6m 16s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/1/check/openstack-tox-functional-py37/b0df316/ : SUCCESS in 8m 16s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/1/check/placement-nova-tox-functional-py37/115732a/ : SUCCESS in 12m 44s\n- placement-nested-perfload http://logs.openstack.org/98/672298/1/check/placement-nested-perfload/4662844/ : SUCCESS in 17m 33s (non-voting)\n- placement-perfload http://logs.openstack.org/98/672298/1/check/placement-perfload/2af1b41/ : SUCCESS in 7m 36s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"718c125a7573f3c7ca0339c453a2fbce633ad16c","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 17:44:46.000000000","message":"Uploaded patch set 2.","accounts_in_message":[],"_revision_number":2},{"id":"310673edf9b05241a104e60aab4ed8bb9c7a6d4b","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 17:45:27.000000000","message":"Patch Set 2:\n\nHappy to break this up if\n\na) we decide to keep it\nb) we decide it needs to be broken up","accounts_in_message":[],"_revision_number":2},{"id":"f74787ea275de4361b70c087db6781c6bbdd4321","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-23 18:35:10.000000000","message":"Patch Set 2:\n\n(15 comments)\n\nOther than a panoply of typos, this is coming together nicely. Some further discussion of a couple of the meatier issues inline.","accounts_in_message":[],"_revision_number":2},{"id":"3a6f1a77e3a6347bd7fd01c380cb50020aa33047","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-23 21:10:53.000000000","message":"Patch Set 2:\n\n(5 comments)\n\nbonus points for use of the term panoply, will attend tomorrow\n\nlet me know what you think about getting rid of clear() (see comments within)","accounts_in_message":[],"_revision_number":2},{"id":"9fbea9943dfd0525c3ef0f40562d384ce4dad02f","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-23 21:50:16.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/98/672298/2/check/grenade-py3/918b349/ : SUCCESS in 1h 04m 40s\n- tempest-full-py3 http://logs.openstack.org/98/672298/2/check/tempest-full-py3/c6caa2f/ : SUCCESS in 1h 26m 51s\n- openstack-tox-docs http://logs.openstack.org/98/672298/2/check/openstack-tox-docs/bb44717/html/ : SUCCESS in 5m 37s\n- openstack-tox-cover http://logs.openstack.org/98/672298/2/check/openstack-tox-cover/0a44a05/cover/ : SUCCESS in 5m 44s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/2/check/openstack-tox-lower-constraints/eeb6bf9/ : SUCCESS in 4m 48s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/2/check/openstack-tox-pep8/3530702/ : SUCCESS in 4m 33s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/2/check/openstack-tox-py27/da91848/ : SUCCESS in 4m 45s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/2/check/openstack-tox-py36/7f9994d/ : SUCCESS in 5m 34s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/2/check/openstack-tox-py37/3d3bdd7/ : SUCCESS in 5m 05s\n- openstack-tox-functional http://logs.openstack.org/98/672298/2/check/openstack-tox-functional/2657a1e/ : SUCCESS in 4m 29s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/2/check/openstack-tox-functional-py36/cb3a3da/ : SUCCESS in 4m 16s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/2/check/openstack-tox-functional-py37/5959389/ : SUCCESS in 5m 13s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/2/check/placement-nova-tox-functional-py37/9de9544/ : SUCCESS in 13m 41s\n- placement-nested-perfload http://logs.openstack.org/98/672298/2/check/placement-nested-perfload/360811d/ : SUCCESS in 25m 54s (non-voting)\n- placement-perfload http://logs.openstack.org/98/672298/2/check/placement-perfload/d7a7f36/ : SUCCESS in 8m 23s (non-voting)","accounts_in_message":[],"_revision_number":2},{"id":"1f13e15f8fdc95e00ca0a4564bec96a0abc997d7","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-23 22:14:55.000000000","message":"Patch Set 2:\n\n(3 comments)","accounts_in_message":[],"_revision_number":2},{"id":"cb1d837a7d51a5445b034632a3231f0a2209ae6e","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-24 10:06:08.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"83dcbf0b421d0ce613293cb46739a57cb77b0399","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-24 10:27:39.000000000","message":"Uploaded patch set 3.","accounts_in_message":[],"_revision_number":3},{"id":"c8ce356eed818326e27a2ca5de947de1c1d3ed5b","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-24 12:05:35.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/98/672298/3/check/grenade-py3/681c9e3/ : SUCCESS in 59m 45s\n- tempest-full-py3 http://logs.openstack.org/98/672298/3/check/tempest-full-py3/144bfbd/ : SUCCESS in 1h 35m 30s\n- openstack-tox-docs http://logs.openstack.org/98/672298/3/check/openstack-tox-docs/bf8c36e/html/ : SUCCESS in 4m 45s\n- openstack-tox-cover http://logs.openstack.org/98/672298/3/check/openstack-tox-cover/ac6b615/cover/ : SUCCESS in 7m 13s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/3/check/openstack-tox-lower-constraints/d5514e7/ : SUCCESS in 6m 21s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/3/check/openstack-tox-pep8/c34b970/ : SUCCESS in 4m 35s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/3/check/openstack-tox-py27/4904db5/ : SUCCESS in 5m 34s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/3/check/openstack-tox-py36/202f4f8/ : SUCCESS in 4m 37s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/3/check/openstack-tox-py37/57f0db5/ : SUCCESS in 5m 53s\n- openstack-tox-functional http://logs.openstack.org/98/672298/3/check/openstack-tox-functional/5da6289/ : SUCCESS in 6m 30s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/3/check/openstack-tox-functional-py36/3148962/ : SUCCESS in 6m 49s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/3/check/openstack-tox-functional-py37/34f27db/ : SUCCESS in 5m 59s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/3/check/placement-nova-tox-functional-py37/1f1d02e/ : SUCCESS in 11m 22s\n- placement-nested-perfload http://logs.openstack.org/98/672298/3/check/placement-nested-perfload/ac191ea/ : SUCCESS in 17m 45s (non-voting)\n- placement-perfload http://logs.openstack.org/98/672298/3/check/placement-perfload/12c8c1c/ : SUCCESS in 6m 57s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"c75e113cd6b88fb0c7ac265a02cf103f00ccb9d0","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-24 12:12:13.000000000","message":"Patch Set 3:\n\nComparing different VMs is a fools errand, but this might have made some difference in nested situations. Compare:\n\nhttp://logs.openstack.org/67/670567/3/check/placement-nested-perfload/fc76783/logs/placement-perf.txt.gz\n\nhttp://logs.openstack.org/98/672298/3/check/placement-nested-perfload/ac191ea/logs/placement-perf.txt","accounts_in_message":[],"_revision_number":3},{"id":"55ff7a3ce693cb039afb3212a4ed3cdbab3ee52c","author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"date":"2019-07-24 14:21:22.000000000","message":"Patch Set 3: Code-Review+2\n\n(1 comment)\n\nYeah, I like the defensive approach of calling .clear() in all the places, and the additional documentation.\n\nAll of my gripes have been addressed, except the DRYing of the lookup methods, which we\u0027ve agreed can be done in a subsequent patch.\n\nWhile a sample size of two results on different clouds isn\u0027t conclusive, it at least provides some assurance that we didn\u0027t make performance significantly *worse*, which, considering the added code consistency and prettiness, is good enough for me.","accounts_in_message":[],"_revision_number":3},{"id":"10e8b0af530a739a2668b79eaec76fb33f68e272","author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"date":"2019-07-25 03:18:11.000000000","message":"Patch Set 3: Code-Review+1\n\nlgtm","accounts_in_message":[],"_revision_number":3},{"id":"e19d6363d0711f9bae8008f7842c5a7801ebefa7","author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"date":"2019-07-25 07:48:55.000000000","message":"Patch Set 3: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":3},{"id":"cbf529c4d5bbbbac4a4e1fa3c9744e8ef8cb5aea","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 07:49:06.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"27bc50576ea262c0c3f6197cc17c46be878f9493","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 08:15:30.000000000","message":"Patch Set 3: Verified-2\n\nBuild failed (gate 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/98/672298/3/gate/grenade-py3/185f69b/ : FAILURE in 19m 37s\n- tempest-full-py3 http://logs.openstack.org/98/672298/3/gate/tempest-full-py3/82c249a/ : FAILURE in 21m 47s\n- openstack-tox-docs http://logs.openstack.org/98/672298/3/gate/openstack-tox-docs/b977b0f/html/ : SUCCESS in 5m 18s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/3/gate/openstack-tox-lower-constraints/5500feb/ : SUCCESS in 5m 52s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/3/gate/openstack-tox-pep8/e8246f3/ : SUCCESS in 5m 35s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py27/dacb443/ : SUCCESS in 4m 42s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py36/fa44b3e/ : SUCCESS in 4m 58s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py37/50b7b58/ : SUCCESS in 5m 33s\n- openstack-tox-functional http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional/ab33d66/ : SUCCESS in 5m 56s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional-py36/11c48d4/ : SUCCESS in 4m 09s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional-py37/9c7274c/ : SUCCESS in 6m 00s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/3/gate/placement-nova-tox-functional-py37/fb6dac3/ : FAILURE in 3m 54s","accounts_in_message":[],"_revision_number":3},{"id":"41d1ec46a6de08b0eeceba7f64e619c6f0a43f49","author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"date":"2019-07-25 08:49:20.000000000","message":"Patch Set 3:\n\nrecheck infra","accounts_in_message":[],"_revision_number":3},{"id":"77ffbf8c8f0e2c84c4d66f74ee3a2e88bf324038","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 10:23:07.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- grenade-py3 http://logs.openstack.org/98/672298/3/check/grenade-py3/820b29d/ : SUCCESS in 1h 02m 24s\n- tempest-full-py3 http://logs.openstack.org/98/672298/3/check/tempest-full-py3/a21ac3f/ : SUCCESS in 1h 31m 12s\n- openstack-tox-docs http://logs.openstack.org/98/672298/3/check/openstack-tox-docs/47a67f8/html/ : SUCCESS in 6m 28s\n- openstack-tox-cover http://logs.openstack.org/98/672298/3/check/openstack-tox-cover/13097e8/cover/ : SUCCESS in 8m 20s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/3/check/openstack-tox-lower-constraints/97d61a7/ : SUCCESS in 6m 12s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/3/check/openstack-tox-pep8/3e81c4e/ : SUCCESS in 5m 26s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/3/check/openstack-tox-py27/2b394e5/ : SUCCESS in 5m 27s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/3/check/openstack-tox-py36/212ce7c/ : SUCCESS in 5m 21s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/3/check/openstack-tox-py37/2150a37/ : SUCCESS in 5m 41s\n- openstack-tox-functional http://logs.openstack.org/98/672298/3/check/openstack-tox-functional/fe935a8/ : SUCCESS in 5m 33s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/3/check/openstack-tox-functional-py36/85071b5/ : SUCCESS in 5m 04s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/3/check/openstack-tox-functional-py37/bc54e73/ : SUCCESS in 5m 22s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/3/check/placement-nova-tox-functional-py37/f295f0e/ : SUCCESS in 12m 10s\n- placement-nested-perfload http://logs.openstack.org/98/672298/3/check/placement-nested-perfload/a443334/ : SUCCESS in 15m 49s (non-voting)\n- placement-perfload http://logs.openstack.org/98/672298/3/check/placement-perfload/191baba/ : SUCCESS in 7m 50s (non-voting)","accounts_in_message":[],"_revision_number":3},{"id":"e83b9841c9452566da03be8c3a3ba5d6ae6f6ff1","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 10:23:29.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":3},{"id":"ab867570659440c1571d5044b9a5e2a820a9073e","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 11:55:39.000000000","message":"Patch Set 3: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- grenade-py3 http://logs.openstack.org/98/672298/3/gate/grenade-py3/950df68/ : SUCCESS in 1h 03m 34s\n- tempest-full-py3 http://logs.openstack.org/98/672298/3/gate/tempest-full-py3/9f2bb53/ : SUCCESS in 1h 26m 28s\n- openstack-tox-docs http://logs.openstack.org/98/672298/3/gate/openstack-tox-docs/93c7024/html/ : SUCCESS in 4m 59s\n- openstack-tox-lower-constraints http://logs.openstack.org/98/672298/3/gate/openstack-tox-lower-constraints/0ce0173/ : SUCCESS in 5m 38s\n- openstack-tox-pep8 http://logs.openstack.org/98/672298/3/gate/openstack-tox-pep8/c3f19ec/ : SUCCESS in 5m 35s\n- openstack-tox-py27 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py27/3a3495e/ : SUCCESS in 5m 29s\n- openstack-tox-py36 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py36/047cc66/ : SUCCESS in 5m 15s\n- openstack-tox-py37 http://logs.openstack.org/98/672298/3/gate/openstack-tox-py37/894a92c/ : SUCCESS in 5m 46s\n- openstack-tox-functional http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional/5455567/ : SUCCESS in 5m 59s\n- openstack-tox-functional-py36 http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional-py36/880a7bb/ : SUCCESS in 5m 19s\n- openstack-tox-functional-py37 http://logs.openstack.org/98/672298/3/gate/openstack-tox-functional-py37/91ca2ac/ : SUCCESS in 5m 32s\n- placement-nova-tox-functional-py37 http://logs.openstack.org/98/672298/3/gate/placement-nova-tox-functional-py37/eeb883f/ : SUCCESS in 10m 51s","accounts_in_message":[],"_revision_number":3},{"id":"46a8573a676e30a0db438c5daa211439253975f5","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2019-07-25 11:55:39.000000000","message":"Change has been successfully merged by Zuul","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"b09f2f917fb41479c5e5b98e9fe07d080d304e52","revisions":{"72222b81b4ef05da740271616b7d6216b7b695d6":{"kind":"REWORK","_number":1,"created":"2019-07-23 14:25:12.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/98/672298/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/98/672298/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/98/672298/1"}}},"commit":{"parents":[{"commit":"9e8040bf0cb4278f45bc23670e8a639b6b242997","subject":"Merge \"Move rc_cache onto RequestContext\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/9e8040bf0cb4278f45bc23670e8a639b6b242997"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-23 13:39:42.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-23 14:25:04.000000000","tz":60},"subject":"Make a TraitCache similar to ResourceClassCache","message":"Make a TraitCache similar to ResourceClassCache\n\nThe Trait and ResourceClass db objects have the same essential\nstructure and are used throughout the code in similar ways:\n\n* turn a name into an id\n* turn an id into a name\n* get an unfiltered list of names\n* make a mapping of ids to names\n\nIn I409a5e819a72d64e66ee390e4528da0c503d8d05 we made the resource\nclass cache request specific. Doing that work made it pretty clear\nwe could have a similar cache for traits and as a result visit the\ntraits db fewer times per request.\n\nTesting will be required to determine if this has any impact (positive\nor negative) and this large patch could be broken into smaller pieces\nbut I wanted to get some early feedback (from humans and zuul).\n\nThe implementation is straightforward: make an AttributeCache super\nclass that is a parent to ResourceClassCache. Create TraitCache as\na sibling. The sole difference is the table used for the data authority\nand the exception raised when an attribute is not found.\n\nA \u0027get_all\u0027 method is added to the cache to list the full collection\nof dicts it contains. That can be be directly transformed into Trait\nand ResourceClass objects.\n\nFrom the API, listing traits and resource classes (without filters) now\nuses the cache instead of going to the db. Where filters (in traits) are\nrequired, the db is accessed.\n\nThe research_context turns lists of trait names into id, name maps for\nrequired and forbidden traits.\n\nFurther, anywhere the traits table was joined to create a name of an id,\nthe cache is used instead. This allows to drop some joins and operate\nfully in-process and in-RAM. No additional loops are added to make this\nhappen: the translation is done in existing loops.\n\nThe upshot of these changes is that unless there is a write operation on\na trait or resource class, both tables are scanned at most once in any\nrequest. And when they are scanned it is to list their entire contents.\n\nChange-Id: Ia19ea2b4ecdde25323579edf60ad6269d05e75a2\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/72222b81b4ef05da740271616b7d6216b7b695d6"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/72222b81b4ef05da740271616b7d6216b7b695d6"}]},"branch":"refs/heads/master"},"9ec1f40266386343392d54904d7341a529c38a09":{"kind":"REWORK","_number":2,"created":"2019-07-23 17:44:46.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/98/672298/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/98/672298/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/98/672298/2"}}},"commit":{"parents":[{"commit":"9e8040bf0cb4278f45bc23670e8a639b6b242997","subject":"Merge \"Move rc_cache onto RequestContext\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/9e8040bf0cb4278f45bc23670e8a639b6b242997"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-23 13:39:42.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-23 17:42:31.000000000","tz":60},"subject":"Make a TraitCache similar to ResourceClassCache","message":"Make a TraitCache similar to ResourceClassCache\n\nThe Trait and ResourceClass db objects have the same essential\nstructure and are used throughout the code in similar ways:\n\n* turn a name into an id\n* turn an id into a name\n* get an unfiltered list of names\n* make a mapping of ids to names\n\nIn I409a5e819a72d64e66ee390e4528da0c503d8d05 we made the resource\nclass cache request specific. Doing that work made it pretty clear\nwe could have a similar cache for traits and as a result visit the\ntraits db fewer times per request.\n\nThe implementation is straightforward: make an AttributeCache super\nclass that is a parent to ResourceClassCache. Create TraitCache as\na sibling. The sole difference is the table used for the data authority\nand the exception raised when an attribute is not found.\n\nThe new super class has been refactored to use private attributes and\nmethods.\n\nA \u0027get_all\u0027 method is added to the cache to list the full collection\nof dicts it contains. That can be be directly transformed into Trait\nand ResourceClass objects. The order of the results of this method\nare not predictable, and sorting them would add cost for no benefit,\nso gabbi tests which had previously relied on the ordered of returned\nresource classes have been removed.\n\nFrom the API, listing traits and resource classes (without filters) now\nuses the cache instead of going to the db. Where filters (in traits) are\nrequired, the db is accessed.\n\nThe research_context turns lists of trait names into id, name maps for\nrequired and forbidden traits.\n\nFurther, anywhere the traits table was joined to create a name of an id,\nthe cache is used instead. This allows to drop some joins and operate\nfully in-process and in-RAM. No additional loops are added to make this\nhappen: the translation is done in existing loops.\n\nThe upshot of these changes is that unless there is a write operation on\na trait or resource class, both tables are scanned at most once in any\nrequest. And when they are scanned it is to list their entire contents.\n\nChange-Id: Ia19ea2b4ecdde25323579edf60ad6269d05e75a2\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/9ec1f40266386343392d54904d7341a529c38a09"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/9ec1f40266386343392d54904d7341a529c38a09"}]},"branch":"refs/heads/master"},"b09f2f917fb41479c5e5b98e9fe07d080d304e52":{"kind":"REWORK","_number":3,"created":"2019-07-24 10:27:39.000000000","uploader":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"ref":"refs/changes/98/672298/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/placement","ref":"refs/changes/98/672298/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/placement refs/changes/98/672298/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/placement refs/changes/98/672298/3"}}},"commit":{"parents":[{"commit":"18c3ebc008a2327d570d4d4b403ac4d829f87940","subject":"Merge \"Further simplify microversion utils\"","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/18c3ebc008a2327d570d4d4b403ac4d829f87940"}]}],"author":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-23 13:39:42.000000000","tz":60},"committer":{"name":"Chris Dent","email":"cdent@anticdent.org","date":"2019-07-24 10:23:50.000000000","tz":60},"subject":"Make a TraitCache similar to ResourceClassCache","message":"Make a TraitCache similar to ResourceClassCache\n\nThe Trait and ResourceClass db objects have the same essential\nstructure and are used throughout the code in similar ways:\n\n* turn a name into an id\n* turn an id into a name\n* get an unfiltered list of names\n* make a mapping of ids to names\n\nIn I409a5e819a72d64e66ee390e4528da0c503d8d05 we made the resource\nclass cache request specific. Doing that work made it pretty clear\nwe could have a similar cache for traits and as a result visit the\ntraits db fewer times per request.\n\nThe implementation is straightforward: make an _AttributeCache super\nclass that is a parent to ResourceClassCache. Create TraitCache as\na sibling. The sole difference is the table used for the data authority\nand the exception raised when an attribute is not found.\n\nThe new super class has been refactored to use private attributes and\nmethods.\n\nA \u0027get_all\u0027 method is added to the cache to list the full collection\nof dicts it contains. That can be be directly transformed into Trait\nand ResourceClass objects. The order of the results of this method\nare not predictable, and sorting them would add cost for no benefit,\nso gabbi tests which had previously relied on the ordered of returned\nresource classes have been removed.\n\nFrom the API, listing traits and resource classes (without filters) now\nuses the cache instead of going to the db. Where filters (in traits) are\nrequired, the db is accessed.\n\nThe research_context turns lists of trait names into id, name maps for\nrequired and forbidden traits.\n\nFurther, anywhere the traits table was joined to create a name of an id,\nthe cache is used instead. This allows to drop some joins and operate\nfully in-process and in-RAM. No additional loops are added to make this\nhappen: the translation is done in existing loops.\n\nThe upshot of these changes is that unless there is a write operation on\na trait or resource class, both tables are scanned at most once in any\nrequest. And when they are scanned it is to list their entire contents.\n\nAs noted in the _AttributeCache docstring there are restrictions\non what kinds of entities can use the cache and some necessary\nprecautions.\n\nChange-Id: Ia19ea2b4ecdde25323579edf60ad6269d05e75a2\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/b09f2f917fb41479c5e5b98e9fe07d080d304e52"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/placement/commit/b09f2f917fb41479c5e5b98e9fe07d080d304e52"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
