)]}'
{".zuul.yaml":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"709f290b2f77c4f9281bb48a102ad1bf3f6946e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Initial set of jobs that will be extended over time as"},{"line_number":2,"context_line":"# we get things working."},{"line_number":3,"context_line":"- project:"},{"line_number":4,"context_line":"    templates:"},{"line_number":5,"context_line":"    check:"},{"line_number":6,"context_line":"      jobs:"},{"line_number":7,"context_line":"        - placement-nested-perfload:"},{"line_number":8,"context_line":"            voting: false"},{"line_number":9,"context_line":"        - placement-perfload:"},{"line_number":10,"context_line":"            voting: false"},{"line_number":11,"context_line":"    gate:"},{"line_number":12,"context_line":"      jobs:"},{"line_number":13,"context_line":"        - openstack-tox-functional"},{"line_number":14,"context_line":"        - openstack-tox-functional-py36"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- job:"},{"line_number":17,"context_line":"    name: placement-perfload"},{"line_number":18,"context_line":"    parent: base"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"9fb8cfa7_e41653f2","line":15,"range":{"start_line":3,"start_character":2,"end_line":15,"end_character":0},"updated":"2019-06-17 14:56:15.000000000","message":"expected a list for dictionary value @ data[\u0027templates\u0027]","commit_id":"7837952d402310dc4ac0fcc5a59c913919005a8f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"1efd8a3332b9bc897ddd12e4fc39bcdaf6419343","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Initial set of jobs that will be extended over time as"},{"line_number":2,"context_line":"# we get things working."},{"line_number":3,"context_line":"- project:"},{"line_number":4,"context_line":"    templates:"},{"line_number":5,"context_line":"    check:"},{"line_number":6,"context_line":"      jobs:"},{"line_number":7,"context_line":"        - placement-nested-perfload:"},{"line_number":8,"context_line":"            voting: false"},{"line_number":9,"context_line":"        - placement-perfload:"},{"line_number":10,"context_line":"            voting: false"},{"line_number":11,"context_line":"    gate:"},{"line_number":12,"context_line":"      jobs:"},{"line_number":13,"context_line":"        - openstack-tox-functional"},{"line_number":14,"context_line":"        - openstack-tox-functional-py36"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- job:"},{"line_number":17,"context_line":"    name: placement-perfload"},{"line_number":18,"context_line":"    parent: base"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9fb8cfa7_a4bffbce","line":15,"range":{"start_line":3,"start_character":2,"end_line":15,"end_character":0},"updated":"2019-06-17 14:56:54.000000000","message":"expected a list for dictionary value @ data[\u0027templates\u0027]","commit_id":"eb3f821bc699628006d742ff6573fe2703b99a86"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"4ce6b55fa0100fbaeffa68e40c892133440458e2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Initial set of jobs that will be extended over time as"},{"line_number":2,"context_line":"# we get things working."},{"line_number":3,"context_line":"- project:"},{"line_number":4,"context_line":"    check:"},{"line_number":5,"context_line":"      jobs:"},{"line_number":6,"context_line":"        - placement-nested-perfload:"},{"line_number":7,"context_line":"            voting: false"},{"line_number":8,"context_line":"        - placement-perfload:"},{"line_number":9,"context_line":"            voting: false"},{"line_number":10,"context_line":"    gate:"},{"line_number":11,"context_line":"      jobs:"},{"line_number":12,"context_line":"        - openstack-tox-functional"},{"line_number":13,"context_line":"        - openstack-tox-functional-py36"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- job:"},{"line_number":16,"context_line":"    name: placement-perfload"},{"line_number":17,"context_line":"    parent: base"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9fb8cfa7_c49c6f6c","line":14,"range":{"start_line":3,"start_character":2,"end_line":14,"end_character":0},"updated":"2019-06-17 14:57:54.000000000","message":"Job placement-nested-perfload not defined","commit_id":"3cc6fd7e3d90c87654b7975b9ca7d9111b50c9d1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- job:"},{"line_number":16,"context_line":"    name: placement-nested-perfload"},{"line_number":17,"context_line":"    parent: base"},{"line_number":18,"context_line":"    description: |"},{"line_number":19,"context_line":"        A simple node on which to run placement with the barest of configs and"},{"line_number":20,"context_line":"        make nested performance related tests against it."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_c8269069","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":16},"updated":"2019-06-19 19:07:10.000000000","message":"as part of the DRYing, this could be parented to placement-perfload?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"- job:"},{"line_number":16,"context_line":"    name: placement-nested-perfload"},{"line_number":17,"context_line":"    parent: base"},{"line_number":18,"context_line":"    description: |"},{"line_number":19,"context_line":"        A simple node on which to run placement with the barest of configs and"},{"line_number":20,"context_line":"        make nested performance related tests against it."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_5b1c9e12","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":16},"in_reply_to":"9fb8cfa7_c8269069","updated":"2019-06-20 08:40:03.000000000","message":"yes","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    name: placement-nested-perfload"},{"line_number":82,"context_line":"    parent: placement-perfload"},{"line_number":83,"context_line":"    description: |"},{"line_number":84,"context_line":"        A simple node on which to run placement with the barest of configs and"},{"line_number":85,"context_line":"        make nested performance related tests against it."},{"line_number":86,"context_line":"    run: playbooks/nested-perfload.yaml"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_6c50ca5f","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":47},"updated":"2019-06-20 12:11:48.000000000","message":"I know this is copy/paste, but it reads weird to me. We\u0027re defining a job, not a node? Unless this is a zuul terminology thing. NBD, just tweaks me every time I read it.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93c3880a8a7ba5720017dfd136546b0138384e07","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    name: placement-nested-perfload"},{"line_number":82,"context_line":"    parent: placement-perfload"},{"line_number":83,"context_line":"    description: |"},{"line_number":84,"context_line":"        A simple node on which to run placement with the barest of configs and"},{"line_number":85,"context_line":"        make nested performance related tests against it."},{"line_number":86,"context_line":"    run: playbooks/nested-perfload.yaml"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_ecf27a6f","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":47},"in_reply_to":"9fb8cfa7_6c50ca5f","updated":"2019-06-20 12:23:10.000000000","message":"It\u0027s kind of a terminology thing, because I\u0027m pretty sure I cargo culted it from somewhere. A job describes a usage of one or more nodes so when the job is running it is \"a simple node on which...|","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"}],"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"job and builds on it to create a set of nested trees that can be"},{"line_number":11,"context_line":"exercised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"In placement-perfload placeload is used to create the provides. This"},{"line_number":14,"context_line":"proves to be cumbersome for nested topologies so this change starts"},{"line_number":15,"context_line":"a new model: Using parallel [1] plus instrumented gabbi to create"},{"line_number":16,"context_line":"nested topologies in a declarative fashion."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fb8cfa7_a86f9c90","line":13,"range":{"start_line":13,"start_character":54,"end_line":13,"end_character":62},"updated":"2019-06-19 19:07:10.000000000","message":"providers","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"naive right now as there\u0027s no point getting too complicated until it"},{"line_number":24,"context_line":"actually works, which will surely take a few iterations."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Zuul is limited to just the perfload jobs while iterating."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"There\u0027s some duplication between perfload.yaml and"},{"line_number":29,"context_line":"nested-perfload.yaml that will be cleared up in a followup once we"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fb8cfa7_a8f47cd0","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":58},"updated":"2019-06-19 19:07:10.000000000","message":"oh, so this should be marked WIP so we don\u0027t accidentally merge that","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"430868d55b4c152358fe5da245610d91796ed627","unresolved":false,"context_lines":[{"line_number":23,"context_line":"naive right now as there\u0027s no point getting too complicated until it"},{"line_number":24,"context_line":"actually works, which will surely take a few iterations."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Zuul is limited to just the perfload jobs while iterating."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"There\u0027s some duplication between perfload.yaml and"},{"line_number":29,"context_line":"nested-perfload.yaml that will be cleared up in a followup once we"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fb8cfa7_7bb72288","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":58},"in_reply_to":"9fb8cfa7_9b2a162a","updated":"2019-06-20 09:03:42.000000000","message":"Yes but otoh when I see a patch that\u0027s *not* WIP/-W I assume it\u0027s a candidate for merging. This was more of a note to self in case I came back later and said, \"why tf did I -W this?\"","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":23,"context_line":"naive right now as there\u0027s no point getting too complicated until it"},{"line_number":24,"context_line":"actually works, which will surely take a few iterations."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Zuul is limited to just the perfload jobs while iterating."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"There\u0027s some duplication between perfload.yaml and"},{"line_number":29,"context_line":"nested-perfload.yaml that will be cleared up in a followup once we"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fb8cfa7_9b2a162a","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":58},"in_reply_to":"9fb8cfa7_a8f47cd0","updated":"2019-06-20 08:40:03.000000000","message":"Did you seem my comment in the \"review guide comments\": \"don\u0027t merge this until .zuul.yaml is up to date. I don\u0027t want to take that back to normal until we know this is right, to not waste CI (it took more than 6 hours to get a node for this), but plenty of people won\u0027t review something that is -W or marked as a WIP...\"\n\nBut perhaps that was just an expression of my frustration rather than a reality.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"}],"gate/gabbits/nested-perfload.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30138b34e006984e9220797442dcca4c7466a083","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# This is a single compute with two numa nodes, to show some nested."},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"defaults:"},{"line_number":4,"context_line":"    request_headers:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_777c25b5","line":1,"updated":"2019-06-19 16:51:46.000000000","message":"We should have a real nested infrastructure for this, but I started with something simple to get us started. We could do that as a followup or in this change, depending on what people wanted.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"      data:"},{"line_number":28,"context_line":"          resource_provider_generation: 1"},{"line_number":29,"context_line":"          traits:"},{"line_number":30,"context_line":"              - $ENVIRON[\u0027CN_TRAITS\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    - name: create numa 1"},{"line_number":33,"context_line":"      POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_08d26835","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":37},"updated":"2019-06-19 19:07:10.000000000","message":"(How) does this do list conversion?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":27,"context_line":"      data:"},{"line_number":28,"context_line":"          resource_provider_generation: 1"},{"line_number":29,"context_line":"          traits:"},{"line_number":30,"context_line":"              - $ENVIRON[\u0027CN_TRAITS\u0027]"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    - name: create numa 1"},{"line_number":33,"context_line":"      POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_7bb5e2ed","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":37},"in_reply_to":"9fb8cfa7_08d26835","updated":"2019-06-20 08:40:03.000000000","message":"Not in this context no. It\u0027s expected that if/when the gabbit changes the caller will need to be better.\n\nI didn\u0027t do that at this time because I wasn\u0027t interested in exploring the more complex topologies until things vaguely worked.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"76b7abca7665b63d816cd01bc0b08c311142d9f1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This should be updated to represent something closer to a real"},{"line_number":4,"context_line":"# and expected nested topology. If changes are made here that impact"},{"line_number":5,"context_line":"# the number of total resource providers, then $COUNT in"},{"line_number":6,"context_line":"# playbooks/nested-perfload.yaml should be updated."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"defaults:"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_975267dd","line":5,"range":{"start_line":5,"start_character":48,"end_line":5,"end_character":53},"updated":"2019-06-28 07:28:29.000000000","message":"PROVIDER_TOPOLOGY_COUNT","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"76b7abca7665b63d816cd01bc0b08c311142d9f1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"      data:"},{"line_number":33,"context_line":"          resource_provider_generation: 1"},{"line_number":34,"context_line":"          traits:"},{"line_number":35,"context_line":"              - COMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    - name: create numa 1"},{"line_number":38,"context_line":"      POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_d299cdc3","line":35,"updated":"2019-06-28 07:28:29.000000000","message":"Adding an aggregate on the compute would be nice, too since we\u0027d like to exercise as more code paths as possible.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c6daa8cd27998c7ad56a0857579251baaa5c29c4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"      data:"},{"line_number":33,"context_line":"          resource_provider_generation: 1"},{"line_number":34,"context_line":"          traits:"},{"line_number":35,"context_line":"              - COMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    - name: create numa 1"},{"line_number":38,"context_line":"      POST: /resource_providers"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_7af3fc09","line":35,"in_reply_to":"9fb8cfa7_d299cdc3","updated":"2019-07-01 11:55:48.000000000","message":"Yes, I agree. The intention here was to get something very basic working and then come back later to make a more accurate topology with aggregates etc to make sure we are exercising the right things.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"}],"gate/perfload-nested-loader.sh":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"GABBIT\u003d$3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"TOKEN\u003d\u0027admin\u0027"},{"line_number":8,"context_line":"for count in $(seq $COUNT); do"},{"line_number":9,"context_line":"    CN_UUID\u003d$(uuidgen)"},{"line_number":10,"context_line":"    CN_TRAITS\u003dCOMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":11,"context_line":"    N1_UUID\u003d$(uuidgen)"}],"source_content_type":"text/x-sh","patch_set":8,"id":"9fb8cfa7_6850c4d5","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":26},"updated":"2019-06-19 19:07:10.000000000","message":"This actually generates all the numbers before starting the loop. For big numbers, that\u0027s a nontrivial amount of overhead. More efficient (if less terse) to use an incrementing counter.\n\n(That said, I tried it with 1e6 and it only takes a couple seconds, so maybe it\u0027s not worth mucking with.)\n\n[Later] Oh, this is actually getting 10 right now. I thought it was getting thousands. Ignore me.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":5,"context_line":"GABBIT\u003d$3"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"TOKEN\u003d\u0027admin\u0027"},{"line_number":8,"context_line":"for count in $(seq $COUNT); do"},{"line_number":9,"context_line":"    CN_UUID\u003d$(uuidgen)"},{"line_number":10,"context_line":"    CN_TRAITS\u003dCOMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":11,"context_line":"    N1_UUID\u003d$(uuidgen)"}],"source_content_type":"text/x-sh","patch_set":8,"id":"9fb8cfa7_7b83a205","line":8,"range":{"start_line":8,"start_character":13,"end_line":8,"end_character":26},"in_reply_to":"9fb8cfa7_6850c4d5","updated":"2019-06-20 08:40:03.000000000","message":"Yeah, the idea is to run 10 here, but 100 of this via parallel.\n\nIt might actually make more sense to only do 1 here, and let the parallel do all the calling.\n\nThis script comes out of an earlier experiment that wasn\u0027t using parallel.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    CN_UUID\u003d$(uuidgen)"},{"line_number":10,"context_line":"    CN_TRAITS\u003dCOMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":11,"context_line":"    N1_UUID\u003d$(uuidgen)"},{"line_number":12,"context_line":"    N1_TRAITS\u003dHW_CPU_X86_AVX2"},{"line_number":13,"context_line":"    N2_UUID\u003d$(uuidgen)"},{"line_number":14,"context_line":"    N2_TRAITS\u003dHW_CPU_X86_SSE"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-sh","patch_set":8,"id":"9fb8cfa7_88e5f80c","line":12,"range":{"start_line":12,"start_character":14,"end_line":12,"end_character":29},"updated":"2019-06-19 19:07:10.000000000","message":"so yeah, if you wanted multiple traits, would you use a shell array variable, a comma-delimited string, ...?\n\n(I\u0027m not downvoting on this or anything, just genuinely curious.)","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"430868d55b4c152358fe5da245610d91796ed627","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    CN_UUID\u003d$(uuidgen)"},{"line_number":10,"context_line":"    CN_TRAITS\u003dCOMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":11,"context_line":"    N1_UUID\u003d$(uuidgen)"},{"line_number":12,"context_line":"    N1_TRAITS\u003dHW_CPU_X86_AVX2"},{"line_number":13,"context_line":"    N2_UUID\u003d$(uuidgen)"},{"line_number":14,"context_line":"    N2_TRAITS\u003dHW_CPU_X86_SSE"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-sh","patch_set":8,"id":"9fb8cfa7_fbaa3217","line":12,"range":{"start_line":12,"start_character":14,"end_line":12,"end_character":29},"in_reply_to":"9fb8cfa7_5bc6de4b","updated":"2019-06-20 09:03:42.000000000","message":"Thanks for that response.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    CN_UUID\u003d$(uuidgen)"},{"line_number":10,"context_line":"    CN_TRAITS\u003dCOMPUTE_VOLUME_MULTI_ATTACH"},{"line_number":11,"context_line":"    N1_UUID\u003d$(uuidgen)"},{"line_number":12,"context_line":"    N1_TRAITS\u003dHW_CPU_X86_AVX2"},{"line_number":13,"context_line":"    N2_UUID\u003d$(uuidgen)"},{"line_number":14,"context_line":"    N2_TRAITS\u003dHW_CPU_X86_SSE"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-sh","patch_set":8,"id":"9fb8cfa7_5bc6de4b","line":12,"range":{"start_line":12,"start_character":14,"end_line":12,"end_character":29},"in_reply_to":"9fb8cfa7_88e5f80c","updated":"2019-06-20 08:40:03.000000000","message":"The easiest and most explicit options, and the ones that gabbi would find easiest to deal with are either:\n\n* multiple explicit env variables\n* putting the raw trait strings in the gabbit\n\nFor traits the latter probably makes the most sense. It\u0027s only the rp uuids that need to be dynamic. Everything else can be static in the gabbit, much as the inventory is.\n\nGabbi doesn\u0027t support non-scalar values from ENVIRON and adding it is not something I\u0027m super keen to do at this point as you would end up with unreadable gabbits and readable gabbits is the reason gabbi exists.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"set -a"},{"line_number":3,"context_line":"HOST\u003d$1"},{"line_number":4,"context_line":"GABBIT\u003d$2"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_acdfa238","line":1,"updated":"2019-06-20 12:11:48.000000000","message":"hmph, this hardly seems worth its own file now\n\nI guess better for extension later","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93c3880a8a7ba5720017dfd136546b0138384e07","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":"set -a"},{"line_number":3,"context_line":"HOST\u003d$1"},{"line_number":4,"context_line":"GABBIT\u003d$2"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_2cf89247","line":1,"in_reply_to":"9fb8cfa7_acdfa238","updated":"2019-06-20 12:23:10.000000000","message":"Yeah, it will also be handy when other things are want to blast some gabbits.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"}],"gate/perfload-nested-runner.sh":[{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"76b7abca7665b63d816cd01bc0b08c311142d9f1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"ALLOCATIONS_TO_WRITE\u003d10"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# The number of providers in each nested tree. This will need to"},{"line_number":25,"context_line":"# need to change whenever the resource provider topology created in"},{"line_number":26,"context_line":"# $GABBIT is changed."},{"line_number":27,"context_line":"PROVIDER_TOPOLOGY_COUNT\u003d3"},{"line_number":28,"context_line":"# Expected total number of providers, used to check that creation"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_d74c5f43","line":25,"range":{"start_line":25,"start_character":2,"end_line":25,"end_character":9},"updated":"2019-06-28 07:28:29.000000000","message":"nix!","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":28,"context_line":"# Expected total number of providers, used to check that creation"},{"line_number":29,"context_line":"# was a success."},{"line_number":30,"context_line":"TOTAL_PROVIDER_COUNT\u003d$((ITERATIONS * PROVIDER_TOPOLOGY_COUNT))"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"trap \"sudo cp -p $LOG $LOG_DEST\" EXIT"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"function time_candidates {"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_ac1002aa","line":31,"updated":"2019-06-20 12:11:48.000000000","message":"++ this is lovely","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"76b7abca7665b63d816cd01bc0b08c311142d9f1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    python -m virtualenv -p python3 .perfload"},{"line_number":65,"context_line":"    . .perfload/bin/activate"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    # install placeload"},{"line_number":68,"context_line":"    pip install gabbi"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    # Create $TOTAL_PROVIDER_COUNT nested resource provider trees,"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_97c34738","line":67,"range":{"start_line":67,"start_character":14,"end_line":67,"end_character":23},"updated":"2019-06-28 07:28:29.000000000","message":"gabbi?","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    # LOADER is called $ITERATIONS times in parallel by 3 * number"},{"line_number":73,"context_line":"    # of processors on the host."},{"line_number":74,"context_line":"    echo \"##### Creating $TOTAL_PROVIDER_COUNT providers\" | tee -a $LOG"},{"line_number":75,"context_line":"    seq 1 $ITERATIONS | parallel -P 3% $LOADER $PLACEMENT_URL $GABBIT"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_ac02426e","line":75,"range":{"start_line":75,"start_character":33,"end_line":75,"end_character":38},"updated":"2019-06-20 12:11:48.000000000","message":"Based on the briefest of glances at man page [1], this means \"calculate the number of jobs to run in parallel by multiplying the number of CPU threads by three\"?\n\n[1] https://www.gnu.org/software/parallel/man.html","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c8a2f070bdcb35badd30d1c7b81cc9da877c5cae","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    # LOADER is called $ITERATIONS times in parallel by 3 * number"},{"line_number":73,"context_line":"    # of processors on the host."},{"line_number":74,"context_line":"    echo \"##### Creating $TOTAL_PROVIDER_COUNT providers\" | tee -a $LOG"},{"line_number":75,"context_line":"    seq 1 $ITERATIONS | parallel -P 3% $LOADER $PLACEMENT_URL $GABBIT"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_676465e6","line":75,"range":{"start_line":75,"start_character":33,"end_line":75,"end_character":38},"in_reply_to":"9fb8cfa7_4cb1468f","updated":"2019-06-20 12:34:43.000000000","message":"gack, how did I miss that comment?\n\nThough s/by/in batches of/ would be clearer, now that I know what\u0027s going on.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93c3880a8a7ba5720017dfd136546b0138384e07","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    # LOADER is called $ITERATIONS times in parallel by 3 * number"},{"line_number":73,"context_line":"    # of processors on the host."},{"line_number":74,"context_line":"    echo \"##### Creating $TOTAL_PROVIDER_COUNT providers\" | tee -a $LOG"},{"line_number":75,"context_line":"    seq 1 $ITERATIONS | parallel -P 3% $LOADER $PLACEMENT_URL $GABBIT"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_4cb1468f","line":75,"range":{"start_line":75,"start_character":33,"end_line":75,"end_character":38},"in_reply_to":"9fb8cfa7_ac02426e","updated":"2019-06-20 12:23:10.000000000","message":"Yes, that\u0027s what the comment directly above says (linux typically counts a hyperthread as a proc unless you tell it not to)","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"},{"line_number":79,"context_line":"    # Skip curl and note if we failed to create the required number of rps"},{"line_number":80,"context_line":"    if [[ $rp_count -ge $TOTAL_PROVIDER_COUNT ]]; then"},{"line_number":81,"context_line":"      load_candidates"},{"line_number":82,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_4ccf067f","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":15},"updated":"2019-06-20 12:11:48.000000000","message":"?\n\nSkip testing?","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c8a2f070bdcb35badd30d1c7b81cc9da877c5cae","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"},{"line_number":79,"context_line":"    # Skip curl and note if we failed to create the required number of rps"},{"line_number":80,"context_line":"    if [[ $rp_count -ge $TOTAL_PROVIDER_COUNT ]]; then"},{"line_number":81,"context_line":"      load_candidates"},{"line_number":82,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_275e6d12","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":15},"in_reply_to":"9fb8cfa7_2c541221","updated":"2019-06-20 12:34:43.000000000","message":"k, swhat I figured","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"93c3880a8a7ba5720017dfd136546b0138384e07","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    set +x"},{"line_number":78,"context_line":"    rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"},{"line_number":79,"context_line":"    # Skip curl and note if we failed to create the required number of rps"},{"line_number":80,"context_line":"    if [[ $rp_count -ge $TOTAL_PROVIDER_COUNT ]]; then"},{"line_number":81,"context_line":"      load_candidates"},{"line_number":82,"context_line":"    else"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_2c541221","line":79,"range":{"start_line":79,"start_character":6,"end_line":79,"end_character":15},"in_reply_to":"9fb8cfa7_4ccf067f","updated":"2019-06-20 12:23:10.000000000","message":"effectively a pasto. prior to load_candidates being extracted and turned  into a function that does some iterations, the line after the if statement was a curl (the one now at line 37).\n\nMy intention is to eventually move these functions which are shared between the two *-runner scripts to a library that they both source. When that happens some of the cruft will become less.","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"76b7abca7665b63d816cd01bc0b08c311142d9f1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    else"},{"line_number":83,"context_line":"        ("},{"line_number":84,"context_line":"            echo \"Unable to create expected number of resource providers. Expected: ${COUNT}, Got: $rp_count\""},{"line_number":85,"context_line":"            echo \"See job-output.txt.gz and logs/screen-placement-api.txt.gz for additional detail.\""},{"line_number":86,"context_line":"        ) | tee -a $LOG"},{"line_number":87,"context_line":"        code\u003d1"},{"line_number":88,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":9,"id":"9fb8cfa7_57f2af71","line":85,"range":{"start_line":85,"start_character":44,"end_line":85,"end_character":76},"updated":"2019-06-28 07:28:29.000000000","message":"logs/placement-api.log?","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"}],"playbooks/nested-perfload.yaml":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30138b34e006984e9220797442dcca4c7466a083","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        chdir: \"{{ ansible_user_dir }}/src/opendev.org/openstack/placement\""},{"line_number":13,"context_line":"      shell:"},{"line_number":14,"context_line":"        executable: /bin/bash"},{"line_number":15,"context_line":"        cmd: gate/perfload-server.sh {{ ansible_user_dir }}"},{"line_number":16,"context_line":"    - name: placement performance"},{"line_number":17,"context_line":"      args:"},{"line_number":18,"context_line":"        chdir: \"{{ ansible_user_dir }}/src/opendev.org/openstack/placement\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_17192987","line":15,"updated":"2019-06-19 16:51:46.000000000","message":"we can use this same command in the original perfload too. I intend to make that change in a followup.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        chdir: \"{{ ansible_user_dir }}/src/opendev.org/openstack/placement\""},{"line_number":13,"context_line":"      shell:"},{"line_number":14,"context_line":"        executable: /bin/bash"},{"line_number":15,"context_line":"        cmd: gate/perfload-server.sh {{ ansible_user_dir }}"},{"line_number":16,"context_line":"    - name: placement performance"},{"line_number":17,"context_line":"      args:"},{"line_number":18,"context_line":"        chdir: \"{{ ansible_user_dir }}/src/opendev.org/openstack/placement\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_08a028a5","line":15,"in_reply_to":"9fb8cfa7_17192987","updated":"2019-06-19 19:07:10.000000000","message":"ack","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      shell:"},{"line_number":20,"context_line":"        executable: /bin/bash"},{"line_number":21,"context_line":"        # TODO(cdent): Change this task to a role?"},{"line_number":22,"context_line":"        cmd: |"},{"line_number":23,"context_line":"          set -x"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"          PLACEMENT_URL\u003d\"http://localhost:8000\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_e8aef496","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":14},"updated":"2019-06-19 19:07:10.000000000","message":"I will once again express my distaste for embedding large shell scripts in yaml. Syntax highlighting alone is reason enough to extract it IMO.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"430868d55b4c152358fe5da245610d91796ed627","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      shell:"},{"line_number":20,"context_line":"        executable: /bin/bash"},{"line_number":21,"context_line":"        # TODO(cdent): Change this task to a role?"},{"line_number":22,"context_line":"        cmd: |"},{"line_number":23,"context_line":"          set -x"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"          PLACEMENT_URL\u003d\"http://localhost:8000\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_1ba62655","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":14},"in_reply_to":"9fb8cfa7_bbdcba18","updated":"2019-06-20 09:03:42.000000000","message":"Neat.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      shell:"},{"line_number":20,"context_line":"        executable: /bin/bash"},{"line_number":21,"context_line":"        # TODO(cdent): Change this task to a role?"},{"line_number":22,"context_line":"        cmd: |"},{"line_number":23,"context_line":"          set -x"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"          PLACEMENT_URL\u003d\"http://localhost:8000\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_bbdcba18","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":14},"in_reply_to":"9fb8cfa7_e8aef496","updated":"2019-06-20 08:40:03.000000000","message":"Yeah, I\u0027ve started that process with ^ but didn\u0027t do it here because of a combination of laziness and \"this task to a role\" thing above.\n\nI can do it when I do the DRYing out.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30138b34e006984e9220797442dcca4c7466a083","unresolved":false,"context_lines":[{"line_number":23,"context_line":"          set -x"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"          PLACEMENT_URL\u003d\"http://localhost:8000\""},{"line_number":26,"context_line":"          LOG\u003dplacement-perf.txt"},{"line_number":27,"context_line":"          LOG_DEST\u003d{{ ansible_user_dir }}/logs"},{"line_number":28,"context_line":"          # The gabbit used to create one nested provider tree. It takes"},{"line_number":29,"context_line":"          # inputs from LOADER to create a unique tree."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_723193ec","line":26,"updated":"2019-06-19 16:51:46.000000000","message":"The log is not as verbose and interesting as the original perfload, because gabbi is being run in quiet mode. This is because it is _too_ verbose when verbose. See http://logs.openstack.org/95/665695/8/check/placement-nested-perfload/6617312/logs/placement-perf.txt to see if it is adequate.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"          TRAIT\u003d\"COMPUTE_VOLUME_MULTI_ATTACH\""},{"line_number":36,"context_line":"          TRAIT1\u003d\"HW_CPU_X86_AVX2\""},{"line_number":37,"context_line":"          PLACEMENT_QUERY\u003d\"resources\u003dDISK_GB:10\u0026resources1\u003dVCPU:1,MEMORY_MB:256\u0026required\u003d${TRAIT}\u0026required1\u003d${TRAIT1}\u0026group_policy\u003disolate\""},{"line_number":38,"context_line":"          # Excepted total number of providers, used to check that creation"},{"line_number":39,"context_line":"          # of success."},{"line_number":40,"context_line":"          COUNT\u003d3000"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_08890825","line":38,"range":{"start_line":38,"start_character":12,"end_line":38,"end_character":20},"updated":"2019-06-19 19:07:10.000000000","message":"Expected","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"          TRAIT\u003d\"COMPUTE_VOLUME_MULTI_ATTACH\""},{"line_number":36,"context_line":"          TRAIT1\u003d\"HW_CPU_X86_AVX2\""},{"line_number":37,"context_line":"          PLACEMENT_QUERY\u003d\"resources\u003dDISK_GB:10\u0026resources1\u003dVCPU:1,MEMORY_MB:256\u0026required\u003d${TRAIT}\u0026required1\u003d${TRAIT1}\u0026group_policy\u003disolate\""},{"line_number":38,"context_line":"          # Excepted total number of providers, used to check that creation"},{"line_number":39,"context_line":"          # of success."},{"line_number":40,"context_line":"          COUNT\u003d3000"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"          trap \"sudo cp -p $LOG $LOG_DEST\" EXIT"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_288e4c2e","line":39,"range":{"start_line":38,"start_character":56,"end_line":39,"end_character":23},"updated":"2019-06-19 19:07:10.000000000","message":"?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":35,"context_line":"          TRAIT\u003d\"COMPUTE_VOLUME_MULTI_ATTACH\""},{"line_number":36,"context_line":"          TRAIT1\u003d\"HW_CPU_X86_AVX2\""},{"line_number":37,"context_line":"          PLACEMENT_QUERY\u003d\"resources\u003dDISK_GB:10\u0026resources1\u003dVCPU:1,MEMORY_MB:256\u0026required\u003d${TRAIT}\u0026required1\u003d${TRAIT1}\u0026group_policy\u003disolate\""},{"line_number":38,"context_line":"          # Excepted total number of providers, used to check that creation"},{"line_number":39,"context_line":"          # of success."},{"line_number":40,"context_line":"          COUNT\u003d3000"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"          trap \"sudo cp -p $LOG $LOG_DEST\" EXIT"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_5bcb3e49","line":39,"range":{"start_line":38,"start_character":56,"end_line":39,"end_character":23},"in_reply_to":"9fb8cfa7_288e4c2e","updated":"2019-06-20 08:40:03.000000000","message":"I probably means \"is a success\" or....... ?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30138b34e006984e9220797442dcca4c7466a083","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"          function load_candidates {"},{"line_number":61,"context_line":"              time_candidates"},{"line_number":62,"context_line":"              for iter in {1..99}; do"},{"line_number":63,"context_line":"                echo \"##### Writing allocation ${iter}\" | tee -a $LOG"},{"line_number":64,"context_line":"                write_allocation"},{"line_number":65,"context_line":"                time_candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_52900f96","line":62,"updated":"2019-06-19 16:51:46.000000000","message":"99 is perhaps too much here because, at least while reading the results takes as long as it does (approx 10 seconds per iteration).\n\nWhat number do people thinks is sufficient?\n\nI\u0027m thinking mainly about wanting to free up gate resources.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"          function load_candidates {"},{"line_number":61,"context_line":"              time_candidates"},{"line_number":62,"context_line":"              for iter in {1..99}; do"},{"line_number":63,"context_line":"                echo \"##### Writing allocation ${iter}\" | tee -a $LOG"},{"line_number":64,"context_line":"                write_allocation"},{"line_number":65,"context_line":"                time_candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_5b501e5f","line":62,"in_reply_to":"9fb8cfa7_28bc0cba","updated":"2019-06-20 08:40:03.000000000","message":"\"reading the results\" \u003d\u003d one iteration of this loop of \"write_allocation\" + \"time_candidates\".\n\nIterating over the first 99 would make write_allocations hairier (it already is very hairy) and in each iteration we want to time getting the results anyway, so even if we do a thing like your suggestion (or, more accurately, use the results of the most recently timed request) we\u0027re still blowing at least 3 seconds per iteration, which isn\u0027t a valuable use of time\n\nbecause the information returned by the iteration isn\u0027t useful at this point: we don\u0027t learn anything from the 99th iteration that we aren\u0027t getting from the first 10.\n\nIf the iteration was low cost (that is, fast) then the value of the info from the iteration doesn\u0027t need to be particular useful\n\nThe goal here is to get useful info, not to create info \"just in case\".","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"          function load_candidates {"},{"line_number":61,"context_line":"              time_candidates"},{"line_number":62,"context_line":"              for iter in {1..99}; do"},{"line_number":63,"context_line":"                echo \"##### Writing allocation ${iter}\" | tee -a $LOG"},{"line_number":64,"context_line":"                write_allocation"},{"line_number":65,"context_line":"                time_candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_28bc0cba","line":62,"in_reply_to":"9fb8cfa7_52900f96","updated":"2019-06-19 19:07:10.000000000","message":"Why not run GET /a_c once and iterate over the first 99 (or however many) results instead?\n\nSorry, what do you mean \"reading the results\"?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"430868d55b4c152358fe5da245610d91796ed627","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"          function load_candidates {"},{"line_number":61,"context_line":"              time_candidates"},{"line_number":62,"context_line":"              for iter in {1..99}; do"},{"line_number":63,"context_line":"                echo \"##### Writing allocation ${iter}\" | tee -a $LOG"},{"line_number":64,"context_line":"                write_allocation"},{"line_number":65,"context_line":"                time_candidates"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_4e0dbe33","line":62,"in_reply_to":"9fb8cfa7_5b501e5f","updated":"2019-06-20 09:03:42.000000000","message":"Okay, but am I at least correct in saying:\n\n- we\u0027re not timing write_allocations itself;\n- the PUTs are very fast; it\u0027s the GETs that take the lion\u0027s share of the time in this loop; and therefore\n- by doing the above we would be cutting this loop effectively in half, time wise?\n\nIf you\u0027re saying the information is not useful or interesting beyond ten iterations, fine, let\u0027s cut it to ten.\n\nOr would it be equally/more interesting to write ten allocations on each iteration (which would be a very small change to write_allocations (which as an aside wouldn\u0027t be horrible to split out of pipe chain-ness to using a temp file)) and do ten iterations?","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"              # install placeload"},{"line_number":78,"context_line":"              pip install gabbi"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"              # Create 1000 nested resource provider trees, resulting in"},{"line_number":81,"context_line":"              # $COUNT total providers. Each call to LOADER creates 10"},{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_8823b8be","line":82,"range":{"start_line":80,"start_character":16,"end_line":82,"end_character":69},"updated":"2019-06-19 19:07:10.000000000","message":"Suggestion: if you defined a couple more vars (up top, so they\u0027re easy to find) like maybe PROVIDERS_PER_GABBI_RUN and BATCH_SIZE, you could use those and $COUNT and a simple calculation or two here rather than hardcoding. That would allow you to tweak sizes and keep things up to date when $GABBIT changes from one place.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":77,"context_line":"              # install placeload"},{"line_number":78,"context_line":"              pip install gabbi"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"              # Create 1000 nested resource provider trees, resulting in"},{"line_number":81,"context_line":"              # $COUNT total providers. Each call to LOADER creates 10"},{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_dbc96e25","line":82,"range":{"start_line":80,"start_character":16,"end_line":82,"end_character":69},"in_reply_to":"9fb8cfa7_8823b8be","updated":"2019-06-20 08:40:03.000000000","message":"Yeah, I was assuming that sort of thing would come in when we (or more likely you or gibi) fix the yaml file.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30138b34e006984e9220797442dcca4c7466a083","unresolved":false,"context_lines":[{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"              set +x"},{"line_number":88,"context_line":"              rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_7703c510","line":85,"updated":"2019-06-19 16:51:46.000000000","message":"This is relatively fast but nowhere near as fast as placeload. Takes about 2.5 minutes. It might be worth telling parallel to do more than the default amount of parallelization since it\u0027s IO not cpu bound.\n\nhttp://logs.openstack.org/95/665695/8/check/placement-nested-perfload/6617312/job-output.txt.gz#_2019-06-19_16_06_10_969886","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7151c01355c1671626fd8b39860016bba2a204f0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"              set +x"},{"line_number":88,"context_line":"              rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_a851dc64","line":85,"in_reply_to":"9fb8cfa7_7703c510","updated":"2019-06-19 19:07:10.000000000","message":"I would think it would be relatively easy to experiment with the numbers to find the optimal batch size.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"430868d55b4c152358fe5da245610d91796ed627","unresolved":false,"context_lines":[{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"              set +x"},{"line_number":88,"context_line":"              rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_8e2416b1","line":85,"in_reply_to":"9fb8cfa7_7bd082ca","updated":"2019-06-20 09:03:42.000000000","message":"That kind of comparitive measuring could be done locally.\n\nBut tell me how you feel about the gate.","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"201bf3cbb3d873955e6b5302c283748b61e9e572","unresolved":false,"context_lines":[{"line_number":82,"context_line":"              # trees. LOADER is called 100 times, in parallel by the"},{"line_number":83,"context_line":"              # number of processors on the host."},{"line_number":84,"context_line":"              echo \"##### Creating $COUNT providers\" | tee -a $LOG"},{"line_number":85,"context_line":"              seq 1 100 | parallel $LOADER $PLACEMENT_URL 10 $GABBIT"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"              set +x"},{"line_number":88,"context_line":"              rp_count\u003d$(curl -H \u0027x-auth-token: admin\u0027 ${PLACEMENT_URL}/resource_providers |json_pp|grep -c \u0027\"name\"\u0027)"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"9fb8cfa7_7bd082ca","line":85,"in_reply_to":"9fb8cfa7_a851dc64","updated":"2019-06-20 08:40:03.000000000","message":"Not when it takes 6 hours to get a node...","commit_id":"327419362cf570e3887e67c724a6830b89f389c9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"42570b7b0b4f6315231a8feb945204966e7ecc31","unresolved":false,"context_lines":[{"line_number":17,"context_line":"        chdir: \"{{ ansible_user_dir }}/src/opendev.org/openstack/placement\""},{"line_number":18,"context_line":"      shell:"},{"line_number":19,"context_line":"        executable: /bin/bash"},{"line_number":20,"context_line":"        cmd: gate/perfload-nested-runner.sh {{ ansible_user_dir }}"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9fb8cfa7_2c1c12c0","line":20,"updated":"2019-06-20 12:11:48.000000000","message":"\\o/","commit_id":"8723bd7772f2b90deceaf0887951f90d0dc0346d"}]}
