)]}'
{".zuul.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7335e894082f1850181633c09170bd0faf80925e","unresolved":true,"context_lines":[{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"},{"line_number":607,"context_line":"      devstack_localrc:"},{"line_number":608,"context_line":"        DEVSTACK_PARALLEL\u003dTrue"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"- job:"},{"line_number":611,"context_line":"    name: devstack-platform-fedora-latest"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"2ff2f50f_578d5ae7","line":608,"range":{"start_line":608,"start_character":7,"end_line":608,"end_character":1},"updated":"2021-01-27 13:07:34.000000000","message":"this need to be \n\n  DEVSTACK_PARALLEL: True","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"54793e3264c1de565664769ccbef28032948175d","unresolved":true,"context_lines":[{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"},{"line_number":607,"context_line":"      devstack_localrc:"},{"line_number":608,"context_line":"        DEVSTACK_PARALLEL\u003dTrue"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"- job:"},{"line_number":611,"context_line":"    name: devstack-platform-fedora-latest"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"acc4656e_61a80226","line":608,"range":{"start_line":608,"start_character":7,"end_line":608,"end_character":1},"in_reply_to":"2ff2f50f_578d5ae7","updated":"2021-01-27 13:08:35.000000000","message":"this is why the job failed it could not render the localrc propertly and that is why the database password was missing","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":599,"context_line":"    voting: false"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"37701225_33678487","line":602,"range":{"start_line":602,"start_character":19,"end_line":602,"end_character":27},"updated":"2021-02-07 10:51:35.000000000","message":"This is not another platform test. Let\u0027s drop this infix.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c40d362f1e0a592621dbc50103f822ea1b84ce90","unresolved":true,"context_lines":[{"line_number":599,"context_line":"    voting: false"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"43715885_9480d727","line":602,"range":{"start_line":602,"start_character":19,"end_line":602,"end_character":27},"in_reply_to":"10ee72e6_92d45c21","updated":"2021-02-09 18:25:46.000000000","message":"I thought of \u0027platform\u0027 as they run full tempest but if it is confusing we can name it like devstack-tempest-full-async","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":599,"context_line":"    voting: false"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"d4049ce8_401e35dd","line":602,"range":{"start_line":602,"start_character":19,"end_line":602,"end_character":27},"in_reply_to":"37701225_33678487","updated":"2021-02-08 14:44:10.000000000","message":"Sure, but I think gmann asked for this. I dunno what \"platform\" is in this case, but...okay :)","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":599,"context_line":"    voting: false"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"10ee72e6_92d45c21","line":602,"range":{"start_line":602,"start_character":19,"end_line":602,"end_character":27},"in_reply_to":"d4049ce8_401e35dd","updated":"2021-02-09 18:16:45.000000000","message":"The \u0027platform\u0027 means something else than the default which is Ubuntu Focal now. See the examples above. This sounds more like the ipv6 variant (but running Tempest).","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"f57dc910_5d861f73","line":603,"range":{"start_line":603,"start_character":12,"end_line":603,"end_character":28},"updated":"2021-02-07 10:51:35.000000000","message":"I know it\u0027s tempting to run tempest but this really optimises stacking so let\u0027s base off devstack.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c40d362f1e0a592621dbc50103f822ea1b84ce90","unresolved":true,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"81653dd4_5b2daf8a","line":603,"range":{"start_line":603,"start_character":12,"end_line":603,"end_character":28},"in_reply_to":"4f13ca34_b88c3613","updated":"2021-02-09 18:25:46.000000000","message":"yeah, I hope soon we enable the parallelization by default and then we can remove this job entirely.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"4f13ca34_b88c3613","line":603,"range":{"start_line":603,"start_character":12,"end_line":603,"end_character":28},"in_reply_to":"9c5268ec_3aa627ff","updated":"2021-02-09 18:16:45.000000000","message":"Then we could just drop it and have the default job use it. Anyhow, I am fine with this if we don\u0027t keep it like this forever.\n\nOoh, and I see I have made a random pun there with \u0027TEMPting to run TEMPest\u0027. I\u0027m getting old... I should\u0027ve caught that!","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9c5268ec_3aa627ff","line":603,"range":{"start_line":603,"start_character":12,"end_line":603,"end_character":28},"in_reply_to":"def7e2b7_25727142","updated":"2021-02-08 14:44:10.000000000","message":"Yeah, I think it\u0027s important to run tempest to make sure you haven\u0027t broken the cloud. To be honest, I have yet to have this happen, even locally, while developing this, but I think that as we move into more and more optimizations, it\u0027s important to make sure we\u0027ve got a working cloud at the end.\n\nAs soon as you\u0027re ready to move some tempest job to run this by default (which I think we should do) then moving this to just run devstack is definitely the right plan.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c08f34ee713e36897857363523dfcb4ac66f6c0c","unresolved":true,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"- job:"},{"line_number":602,"context_line":"    name: devstack-platform-async"},{"line_number":603,"context_line":"    parent: tempest-full-py3"},{"line_number":604,"context_line":"    description: Async mode enabled"},{"line_number":605,"context_line":"    voting: false"},{"line_number":606,"context_line":"    vars:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"def7e2b7_25727142","line":603,"range":{"start_line":603,"start_character":12,"end_line":603,"end_character":28},"in_reply_to":"f57dc910_5d861f73","updated":"2021-02-08 11:46:41.000000000","message":"i think dan based it off this to prove that the cloud was working after the devstack run","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"}],"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":33,"context_line":"devstack (about 2.3 vs 0.5 normally), indicating more is getting"},{"line_number":34,"context_line":"done. On my older rotating rust devstack machine with 8 cores, this"},{"line_number":35,"context_line":"runs consistently 22% faster on a"},{"line_number":36,"context_line":"stripped-down nova-glance-neutron-keystone config."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Change-Id: I270a910b531641b023c13f75dfedca057a1f1031"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a4e14a65_ae547655","line":36,"updated":"2021-01-26 22:37:52.000000000","message":"i have done some quick testing today with a simiar but slight different config\n\nnova, cinder, neutron, glance, keystone, placment, horizon, tempest\nhttp://paste.openstack.org/show/802010/\n\non a VM with 8G of ram split across 2 numa nodes with 8 unpinned cores and 1G hugepages.\n\nsean@p50:~$ openstack --os-cloud\u003dadmin flavor show small-multi-numa\n+----------------------------+-------------------------------------------------------------------------------------+\n| Field                      | Value                                                                               |\n+----------------------------+-------------------------------------------------------------------------------------+\n| OS-FLV-DISABLED:disabled   | False                                                                               |\n| OS-FLV-EXT-DATA:ephemeral  | 0                                                                                   |\n| access_project_ids         | None                                                                                |\n| disk                       | 0                                                                                   |\n| id                         | cbcaf445-00de-41d9-8398-0ad4c6358d16                                                |\n| name                       | small-multi-numa                                                                    |\n| os-flavor-access:is_public | True                                                                                |\n| properties                 | hw:cpu_sockets\u003d\u00272\u0027, hw:cpu_threads\u003d\u00272\u0027, hw:mem_page_size\u003d\u0027large\u0027, hw:numa_nodes\u003d\u00272\u0027 |\n| ram                        | 8192                                                                                |\n| rxtx_factor                | 1.0                                                                                 |\n| swap                       |                                                                                     |\n| vcpus                      | 8                                                                                   |\n+----------------------------+-------------------------------------------------------------------------------------+\n\nthis is effectly the same as the gate vms but with multi numa and cinder volume for the root disk.\n\nit has a aging but reativly ok 2.7GHz cpu\n\nubuntu@numa-1:/opt/repos/devstack$ lscpu\nArchitecture:                    x86_64\nCPU op-mode(s):                  32-bit, 64-bit\nByte Order:                      Little Endian\nAddress sizes:                   46 bits physical, 48 bits virtual\nCPU(s):                          12\nOn-line CPU(s) list:             0-11\nThread(s) per core:              2\nCore(s) per socket:              3\nSocket(s):                       2\nNUMA node(s):                    2\nVendor ID:                       GenuineIntel\nCPU family:                      6\nModel:                           58\nModel name:                      Intel Xeon E3-12xx v2 (Ivy Bridge, IBRS)\nStepping:                        9\nCPU MHz:                         2687.168\nBogoMIPS:                        5374.33\nVirtualization:                  VT-x\nL1d cache:                       192 KiB\nL1i cache:                       192 KiB\nL2 cache:                        24 MiB\nL3 cache:                        32 MiB\nNUMA node0 CPU(s):               0-5\nNUMA node1 CPU(s):               6-11\nVulnerability Itlb multihit:     Not affected\nVulnerability L1tf:              Mitigation; PTE Inversion; VMX conditional cache flushes, SMT vulnerable\nVulnerability Mds:               Mitigation; Clear CPU buffers; SMT Host state unknown\nVulnerability Meltdown:          Mitigation; PTI\nVulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp\nVulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization\nVulnerability Spectre v2:        Mitigation; Full generic retpoline, IBPB conditional, IBRS_FW, STIBP conditional, RSB filling\nVulnerability Srbds:             Unknown: Dependent on hypervisor status\nVulnerability Tsx async abort:   Not affected\nFlags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid pni \n                                 pclmulqdq vmx ssse3 cx16 pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cpuid_fault pti ssbd ibrs ibpb stibp tpr_shadow vnmi \n                                 flexpriority ept vpid fsgsbase tsc_adjust smep erms xsaveopt arat umip md_clear arch_capabilities\n\nwith full passthough of the cpu model.\n\nto test i used ubuntu 20.04 \n\nubuntu@numa-1:/opt/repos/devstack$ lsb_release -a\nNo LSB modules are available.\nDistributor ID:\tUbuntu\nDescription:\tUbuntu 20.04.1 LTS\nRelease:\t20.04\nCodename:\tfocal\n\nwith the default kernel that is currelty in the repo.\nubuntu@numa-1:/opt/repos/devstack$ uname -a\nLinux numa-1 5.4.0-64-generic #72-Ubuntu SMP Fri Jan 15 10:27:54 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux\n\n\nto eliminate the over head of networking i first stacked the host and unstacked with RECLONE\u003dTure\n\nthis synced all the repos and enusred my package were up to date.\ni then rebooted the vm after unstacking and checkout this patch.\n\ni then timed the running of this patch stacking with RECLONE\u003dTrue commented out (default to False)\n\nwhen it completed i unstacked and stacked again with  DEVSTACK_PARALLEL\u003dTrue\n\nthis vm is one of my main dev vms and depening on repo drifft and how many apckage updates i have to do this typically take about 15 mins our betwee about 815-920 seconds\n\nhttp://paste.openstack.org/show/802007/\n\nwith this patch applied the primed run with  DEVSTACK_PARALLEL\u003dFalse took \n826 seconds which down form 842 seconds in the warmup run.\n\nwhen is set DEVSTACK_PARALLEL\u003dTrue it went form 826 to 575\nwhich is roughly a 30% reduction in execution time.\n\n\nwhile i was running i had htop open and for all but the very start it was over a load of 2.0 peaking at 3.78 breifle wiht 1-2 mins of execution over 3.\n\nfor the non paralle  runs the load avgerage did not peeak above 2.1\nand was generally around 1.2  or less.\n\nso while it is not using all the cores aviable to it by any means this patch does indeed seam to imporve the performace of destack when the repos already exist.\nthis is the case in the ci where zuul has prepared the repos in advance and is also typically the case for most developer as we tend to reuse the same host but unstack and reskack as needed so git clone tend to be a small amount of the time.\n\none thing that is partcallary notable is the reduction in \"Unaccounted time\"    from 370 to 74 seconds\nsome of this became async_wait and we see a slightly higher usage of osc increase form ~220 to 232\nbut it save about 250 second over all reducing the run time to just over 10 mins.\n\nas i mentioned before my server that is runign the vm has a 2.7Ghz ivybridge processor so its slow singel treaded performacne vs a moderen porcesssor is proably the main bottelneck to may devstack speed.\ni suspect the performace imporvemnt may be less on a laptop  or desktop where you might have 4+GHz processor but i think it should be reflective of devstack performance in the gate.\n\ni have partally optimised my home cloud perfomce by using hugepages and host passthough so i suspect the gate vms will actully be slower but i expect the performace imporment to also be larger there as a result.\nthe other thing to note is this pacth only make nova and keystone run async.\n\nneutron glance cinder and horizon in my deploy were not optimised in the same way. so it this was expaned it may  contntiue to scale well.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"}],"extras.d/80-tempest.sh":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":17,"context_line":"        # local.conf Tempest option overrides"},{"line_number":18,"context_line":"        :"},{"line_number":19,"context_line":"    elif [[ \"$1\" \u003d\u003d \"stack\" \u0026\u0026 \"$2\" \u003d\u003d \"test-config\" ]]; then"},{"line_number":20,"context_line":"        async_wait install_tempest"},{"line_number":21,"context_line":"        echo_summary \"Initializing Tempest\""},{"line_number":22,"context_line":"        configure_tempest"},{"line_number":23,"context_line":"        echo_summary \"Installing Tempest Plugins\""}],"source_content_type":"text/x-sh","patch_set":7,"id":"f97f0420_e5bc893e","line":20,"updated":"2021-01-26 22:37:52.000000000","message":"im not sure how i feel about splitting async call acoss devstack phases.\ni thihnk this coudl unfortunately break some plugins.\nperhaps on in the tempest case but\n\nthe way around that is to make \n\nasync_wait install_tempest callable multiple times\n\ne.g. if i have a plugin that run in post-config that expects tempest to be installed in the install phase\nthen that pluging could check if DEVSTACK_PARALLE\u003d\u003dTrue and if so call async_wait install_tempest\n\nthe the second invocation of \"async_wait install_tempest\" here would jsut return imediatly since it was already completed.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0a356e3850ca6107c8bf670a85eac4ae015c20a3","unresolved":true,"context_lines":[{"line_number":17,"context_line":"        # local.conf Tempest option overrides"},{"line_number":18,"context_line":"        :"},{"line_number":19,"context_line":"    elif [[ \"$1\" \u003d\u003d \"stack\" \u0026\u0026 \"$2\" \u003d\u003d \"test-config\" ]]; then"},{"line_number":20,"context_line":"        async_wait install_tempest"},{"line_number":21,"context_line":"        echo_summary \"Initializing Tempest\""},{"line_number":22,"context_line":"        configure_tempest"},{"line_number":23,"context_line":"        echo_summary \"Installing Tempest Plugins\""}],"source_content_type":"text/x-sh","patch_set":7,"id":"407af8e3_c3547a09","line":20,"in_reply_to":"f97f0420_e5bc893e","updated":"2021-01-26 23:18:36.000000000","message":"That\u0027s exactly what happens if you wait for something that was already waited for (or never started in the first place). So, yes, I would expect anything that depends on that finishing would wait for it.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":21,"context_line":"        echo_summary \"Initializing Tempest\""},{"line_number":22,"context_line":"        configure_tempest"},{"line_number":23,"context_line":"        echo_summary \"Installing Tempest Plugins\""},{"line_number":24,"context_line":"        install_tempest_plugins"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if [[ \"$1\" \u003d\u003d \"unstack\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":10,"id":"83117dc9_10416188","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":31},"updated":"2021-02-03 02:02:11.000000000","message":"this could be good to run in async mode and useful for cases when large number of plugins are enabled. or better to do in install_tempest_plugins() by iterating over each plugins. not blocking for this patch can be done later.\n https://github.com/openstack/devstack/blob/aa2821eb89ab9c8048509d15fe41215c163d2f50/lib/tempest#L725","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":21,"context_line":"        echo_summary \"Initializing Tempest\""},{"line_number":22,"context_line":"        configure_tempest"},{"line_number":23,"context_line":"        echo_summary \"Installing Tempest Plugins\""},{"line_number":24,"context_line":"        install_tempest_plugins"},{"line_number":25,"context_line":"    fi"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if [[ \"$1\" \u003d\u003d \"unstack\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":10,"id":"58fff930_4e32d858","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":31},"in_reply_to":"83117dc9_10416188","updated":"2021-02-03 14:49:44.000000000","message":"Cool, yeah, I feel like there are many other places where we can kick off some of the tempest stuff in the background. I have done some easy and low-hanging fruit with things I am familiar with, but there is much more to do I think.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"}],"inc/async":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":19,"context_line":"    local pidfile\u003d\"${DEST}/async/${name}.pid\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    if [ -f \"$pidfile\" ]; then"},{"line_number":22,"context_line":"        cat ${DEST}/async/${name}.pid"},{"line_number":23,"context_line":"    else"},{"line_number":24,"context_line":"        echo \u0027UNKNOWN\u0027"},{"line_number":25,"context_line":"        return 1"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"3cb08f78_6080b68d","line":22,"range":{"start_line":22,"start_character":12,"end_line":22,"end_character":37},"updated":"2021-01-26 22:37:52.000000000","message":"nit: ${pidfile}","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0a356e3850ca6107c8bf670a85eac4ae015c20a3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"    local pidfile\u003d\"${DEST}/async/${name}.pid\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    if [ -f \"$pidfile\" ]; then"},{"line_number":22,"context_line":"        cat ${DEST}/async/${name}.pid"},{"line_number":23,"context_line":"    else"},{"line_number":24,"context_line":"        echo \u0027UNKNOWN\u0027"},{"line_number":25,"context_line":"        return 1"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"17a47872_88fc51a2","line":22,"range":{"start_line":22,"start_character":12,"end_line":22,"end_character":37},"in_reply_to":"3cb08f78_6080b68d","updated":"2021-01-26 23:18:36.000000000","message":"Oops, yep, half-finished cleanup :P","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":100,"context_line":"            rc\u003d$?"},{"line_number":101,"context_line":"            runtime\u003d$(("},{"line_number":102,"context_line":"                $(date \"+%s\") - $(stat -c \u0027%Y\u0027 ${DEST}/async/${name}.pid)))"},{"line_number":103,"context_line":"            rm -f ${DEST}/async/${name}.pid"},{"line_number":104,"context_line":"            echo Async job $name finished with result $rc in $runtime seconds"},{"line_number":105,"context_line":"            cat ${DEST}/async/${name}.log"},{"line_number":106,"context_line":"            echo End of async job $name output"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"b10452ca_27a5f0ec","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":43},"updated":"2021-01-26 22:37:52.000000000","message":"if we did not remove this pid file we coudl tell the difference between already finished task and one that never ran later.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0a356e3850ca6107c8bf670a85eac4ae015c20a3","unresolved":true,"context_lines":[{"line_number":100,"context_line":"            rc\u003d$?"},{"line_number":101,"context_line":"            runtime\u003d$(("},{"line_number":102,"context_line":"                $(date \"+%s\") - $(stat -c \u0027%Y\u0027 ${DEST}/async/${name}.pid)))"},{"line_number":103,"context_line":"            rm -f ${DEST}/async/${name}.pid"},{"line_number":104,"context_line":"            echo Async job $name finished with result $rc in $runtime seconds"},{"line_number":105,"context_line":"            cat ${DEST}/async/${name}.log"},{"line_number":106,"context_line":"            echo End of async job $name output"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"3918ff8e_c68c53c0","line":103,"range":{"start_line":103,"start_character":12,"end_line":103,"end_character":43},"in_reply_to":"b10452ca_27a5f0ec","updated":"2021-01-26 23:18:36.000000000","message":"We don\u0027t want to wait on something that isn\u0027t a child (anymore) or wait will throw an error. I don\u0027t think we need to know whether something was already finished or never started. If you need to know if something was started, you should be looking at the config flags and only use wait for making sure you go after.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":108,"context_line":"                echo Stopping async wait due to error: $*"},{"line_number":109,"context_line":"                break"},{"line_number":110,"context_line":"            fi"},{"line_number":111,"context_line":"        else"},{"line_number":112,"context_line":"            # This could probably be removed - it is really just here"},{"line_number":113,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":114,"context_line":"            # name, but it also shows up for things we didn\u0027t start"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"bb8bc859_d296c87e","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":12},"updated":"2021-01-26 22:37:52.000000000","message":"so this else is where we woudl end up if we did\nasync_wait install_tempest\nin two places. so i think we actully do want to have this.\n\nthe devstack plug will do async_wait install_tempest once and go into the if branch then\nlib/tempset will do async_wait install_tempest a second time\nso it would never started or already finished.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0a356e3850ca6107c8bf670a85eac4ae015c20a3","unresolved":true,"context_lines":[{"line_number":108,"context_line":"                echo Stopping async wait due to error: $*"},{"line_number":109,"context_line":"                break"},{"line_number":110,"context_line":"            fi"},{"line_number":111,"context_line":"        else"},{"line_number":112,"context_line":"            # This could probably be removed - it is really just here"},{"line_number":113,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":114,"context_line":"            # name, but it also shows up for things we didn\u0027t start"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"afa8ecb0_f4e1c08b","line":111,"range":{"start_line":111,"start_character":8,"end_line":111,"end_character":12},"in_reply_to":"bb8bc859_d296c87e","updated":"2021-01-26 23:18:36.000000000","message":"It would print that, yeah, but that\u0027s what the message says ... \"not waiting\". I can add \"or already finished\" for clarity.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":113,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":114,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":115,"context_line":"            # because they were not enabled."},{"line_number":116,"context_line":"            echo Not waiting for async task $name that we never started"},{"line_number":117,"context_line":"        fi"},{"line_number":118,"context_line":"    done"},{"line_number":119,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"1b7c5b37_5221c2c4","line":116,"range":{"start_line":116,"start_character":50,"end_line":116,"end_character":71},"updated":"2021-01-26 22:37:52.000000000","message":"that never started or already finished","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0a356e3850ca6107c8bf670a85eac4ae015c20a3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":114,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":115,"context_line":"            # because they were not enabled."},{"line_number":116,"context_line":"            echo Not waiting for async task $name that we never started"},{"line_number":117,"context_line":"        fi"},{"line_number":118,"context_line":"    done"},{"line_number":119,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"09a24767_28dc307b","line":116,"range":{"start_line":116,"start_character":50,"end_line":116,"end_character":71},"in_reply_to":"1b7c5b37_5221c2c4","updated":"2021-01-26 23:18:36.000000000","message":"Ack","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":122,"context_line":"}"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"# Check for uncollected futures and wait on them"},{"line_number":125,"context_line":"function async_cleanup {"},{"line_number":126,"context_line":"    local name"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    if [[ \"$DEVSTACK_PARALLEL\" !\u003d \"True\" ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"3ab345d3_81fb41f3","line":125,"range":{"start_line":125,"start_character":9,"end_line":125,"end_character":22},"updated":"2021-01-26 22:37:52.000000000","message":"then this would be where all pid files where cleaned.","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    set +o xtrace"},{"line_number":39,"context_line":"    rc\u003d$?"},{"line_number":40,"context_line":"    if [ $rc -eq 0 ]; then"},{"line_number":41,"context_line":"        echo \"Async job $name finished successfully\""},{"line_number":42,"context_line":"    else"},{"line_number":43,"context_line":"        echo \"Async job $name FAILED with rc $rc\""},{"line_number":44,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"01f01c29_e0344c4e","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":29},"updated":"2021-02-03 02:02:11.000000000","message":"may be we can add func name also here for clear logging. ditto for all logging.\n\nlocal func\u003d\"$2\"\necho \"Async job $name running func $func finished successfully\"","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    set +o xtrace"},{"line_number":39,"context_line":"    rc\u003d$?"},{"line_number":40,"context_line":"    if [ $rc -eq 0 ]; then"},{"line_number":41,"context_line":"        echo \"Async job $name finished successfully\""},{"line_number":42,"context_line":"    else"},{"line_number":43,"context_line":"        echo \"Async job $name FAILED with rc $rc\""},{"line_number":44,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"90f590a1_991a7685","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":29},"in_reply_to":"01f01c29_e0344c4e","updated":"2021-02-03 14:49:44.000000000","message":"sure. Technically you can use async_run (and this) to kick off non-function async tasks, so I didn\u0027t want to rely too heavily on the fact that we\u0027re running a function (although we could just say that everything needs to be wrapped in a function to be async\u0027d I guess).","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"db4b7693_ef45af12","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"updated":"2021-02-07 10:51:35.000000000","message":"We should control this directory externally.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"04ea52f4cd38762e3ba58600efd32ed53fc0ca67","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"504bee79_2da020e7","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"00e8cced_cc0c3f11","updated":"2021-02-08 15:15:13.000000000","message":"Oh, that\u0027s totally not what I thought he meant. And yeah, agree with you, not sure why we would need to do that.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"999e2fa5b57ef759dbe8bf856548f923df8510b8","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"00e8cced_cc0c3f11","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"33c10173_91e0efc1","updated":"2021-02-08 15:13:37.000000000","message":"adding a varablie like https://github.com/openstack/devstack/blob/master/stackrc#L48\nwhich can be used to contol the directory that is used to store these files.\n\nASYNC_TASK_DIR\u003d${ASYNC_TASK_DIR:-\"${DEST}/async\"}\n\ngiven this is under dest however im not sure its requried.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8443b176821ab391a8a0ebfd41bbd959fdd68644","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"3f99ecd9_ab532ddb","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"3def8b68_921cc1ea","updated":"2021-02-10 17:35:13.000000000","message":"I would never ever use any pattern in devstack to prove that it\u0027s some good practice. The codebase is very \"unstandardised\" so to speak. ;-)\n\nFrom my POV it makes more sense to init it once and then rely on that fact.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9c5cf6eb342232c4d2040601e66901430ccd50dd","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"d85db2c2_fe922c71","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"504bee79_2da020e7","updated":"2021-02-08 15:20:56.000000000","message":"well i could be wong but that the only thing i could think of.\n\nperhaps he ment pull the creation fo this out in to an async_init function so that its not created on each invocation?\nthat could also delete it if it already existed to ensure it was created clean once at the start of the devstack run?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"afcc72e1f9f19ccef477101c560b1f88560249ad","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"984b3554_ccf5f089","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"5780bf40_e725689a","updated":"2021-02-09 18:37:28.000000000","message":"Okay, I guess I\u0027m not sure why that really matters. The mkdir -p should be uuber trivial if the directory exists, but glad to do it ahead of time if that\u0027s more consistent.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0be9149db7f3de139927558861bef48f42a73610","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"3def8b68_921cc1ea","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"984b3554_ccf5f089","updated":"2021-02-10 00:01:34.000000000","message":"Coming back to this after a bunch of stupid mistakes on my part moving this to create-at-init-time, I really think that just the \"mkdir -p\" right before we use it is superior.\n\nI see a lot of other such behaviors in devstack:\n\n grep \u0027mkdir -p\u0027 -r * | wc -l\n 46\n\nI know not all of those are core features like this, but I\u0027d much rather just be able to use the async functions instead of have to \"init\" them first. I have some test scripts I use to test the async stuff without having to do a full stack first, and those have to \"init\" things first now too.\n\nAnyway, not worth arguing over, and the latest rev here does init early, but just want to re-assert myself that I think it\u0027s far better to do it here on demand, and there\u0027s no reason not to that I can see.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"5780bf40_e725689a","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"d85db2c2_fe922c71","updated":"2021-02-09 18:16:45.000000000","message":"Yup, I meant the directory should be created once when the stacking starts and removed when it finished cleanly (I mentioned this part of the thought elsewhere, sorry for shady comments; see the other thread now as well).","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    shift"},{"line_number":78,"context_line":"    local inifile\u003d${DEST}/async/${name}.ini"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    mkdir -p $(dirname $inifile)"},{"line_number":81,"context_line":"    touch $inifile"},{"line_number":82,"context_line":"    iniset $inifile job command \"$*\""},{"line_number":83,"context_line":"    iniset $inifile job start_time $(date +%s%3N)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"33c10173_91e0efc1","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":32},"in_reply_to":"db4b7693_ef45af12","updated":"2021-02-08 14:44:10.000000000","message":"What does that mean?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"87f9e08a_7236d4e8","line":145,"updated":"2021-02-07 10:51:35.000000000","message":"I\u0027m an anti-fan of silent failures. I would say we should make the code know whether to wait for something or not rather than wait for everything. Perhaps we could register noops?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"c28577b9_59370dfc","line":145,"in_reply_to":"6cd81270_296d7ce7","updated":"2021-02-09 18:16:45.000000000","message":"Ack, I see how you want to use it. That might be problematic with my strict approach. I don\u0027t mind it then as I don\u0027t have any good advice on how to handle this without overengineering.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c08f34ee713e36897857363523dfcb4ac66f6c0c","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"bd612015_44b2fd84","line":145,"in_reply_to":"87f9e08a_7236d4e8","updated":"2021-02-08 11:46:41.000000000","message":"well how would you do that and allow devstack plugins to wait on async jobs.\n\nthe way its currently structure is as a plugin i can wait on a task that is created by core devstack\nin a pahse before devstack normally would wait. the plug will then continue with its execution yeild back to core devstack and when devstack normally waits it ill get this message.\n\nwe need to support 2 things waiting on the single async task in such a way as to garunette that neither runs until its complete.\n\nthe plugins would never register the task its waiting on in this case its being done by either another plugin or core devstack so im not usre registing a noop would help here. core devstack cant know if a pluging might wait on one of its async task.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            # to help notice if you wait for something by the wrong"},{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"6cd81270_296d7ce7","line":145,"in_reply_to":"bd612015_44b2fd84","updated":"2021-02-08 14:44:10.000000000","message":"This doesn\u0027t wait for everything, this *is* a no-op. And, it\u0027s not a silent failure.\n\nThis allows us to wait for something in more than one place, and not block or fail on the second. It also lets us wait for things without checking config first. For example, if glance requires cinder to be started first in some situations (which it does), it\u0027s so much cleaner to just let glance say \"I need to stop here until after cinder has started\" without needing to do that only if cinder is configured to run.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"},{"line_number":149,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"3924f23e_16331998","line":146,"range":{"start_line":146,"start_character":17,"end_line":146,"end_character":37},"updated":"2021-02-07 10:51:35.000000000","message":"I think it should be \"has already been waited for\" as that is when we delete the ini.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"},{"line_number":149,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"16c6c3ed_bb2ae8d8","line":146,"range":{"start_line":146,"start_character":17,"end_line":146,"end_character":37},"in_reply_to":"15b66b24_03a9086d","updated":"2021-02-09 18:16:45.000000000","message":"OK, then please amend. 😊","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":143,"context_line":"            # name, but it also shows up for things we didn\u0027t start"},{"line_number":144,"context_line":"            # because they were not enabled."},{"line_number":145,"context_line":"            echo Not waiting for async task $name that we never started or \\"},{"line_number":146,"context_line":"                 has already finished"},{"line_number":147,"context_line":"        fi"},{"line_number":148,"context_line":"    done"},{"line_number":149,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"15b66b24_03a9086d","line":146,"range":{"start_line":146,"start_character":17,"end_line":146,"end_character":37},"in_reply_to":"3924f23e_16331998","updated":"2021-02-08 14:44:10.000000000","message":"Sure.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"77299337bd72387a7312812ec6209fcb66c5be09","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#  async_wait my_shell_func"},{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DEVSTACK_PARALLEL\u003d$(trueorfalse False DEVSTACK_PARALLEL)"},{"line_number":15,"context_line":"_ASYNC_BG_TIME\u003d0"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Keep track of how much total time was spent in background tasks"}],"source_content_type":"application/x-shellscript","patch_set":14,"id":"70af4559_441fc41d","line":14,"updated":"2021-02-10 18:20:57.000000000","message":"This doesn\u0027t work as expected because the file gets sourced before stackrc. If you don\u0027t set DEVSTACK_PARALLEL to exactly \"True\" in your rc file it won\u0027t be activated.","commit_id":"30d9bf9a6d8af9590b04caa3757956522f2004d4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5414d258f1950b9cc52fc74914d3e86c1c059167","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#  async_wait my_shell_func"},{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DEVSTACK_PARALLEL\u003d$(trueorfalse False DEVSTACK_PARALLEL)"},{"line_number":15,"context_line":"_ASYNC_BG_TIME\u003d0"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Keep track of how much total time was spent in background tasks"}],"source_content_type":"application/x-shellscript","patch_set":14,"id":"eb3388f0_481e464c","line":14,"in_reply_to":"70af4559_441fc41d","updated":"2021-02-10 18:33:46.000000000","message":"Fair enough, but since this is an inc/ thing I\u0027m not sure what to do to change it, other than move this elsewhere further from this code, or just check to see if it\u0027s set at all.\n\nAnyway, hopefully not a blocker such that I can revise this in a subsequent patch since this has been queued for quite some time :)","commit_id":"30d9bf9a6d8af9590b04caa3757956522f2004d4"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"573224c27a36ebc64cc14a36b59b8ab124d2205a","unresolved":true,"context_lines":[{"line_number":11,"context_line":"#  async_wait my_shell_func"},{"line_number":12,"context_line":"#"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DEVSTACK_PARALLEL\u003d$(trueorfalse False DEVSTACK_PARALLEL)"},{"line_number":15,"context_line":"_ASYNC_BG_TIME\u003d0"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# Keep track of how much total time was spent in background tasks"}],"source_content_type":"application/x-shellscript","patch_set":14,"id":"6c3b8d9b_c9533e08","line":14,"in_reply_to":"eb3388f0_481e464c","updated":"2021-02-10 19:04:07.000000000","message":"Yeah, I don\u0027t think this needs to block the patch. I just wanted to report the issue because I spent a bunch of time trying to figure out why I couldn\u0027t get parallel execution with DEVSTACK_PARALLEL\u003dtrue.","commit_id":"30d9bf9a6d8af9590b04caa3757956522f2004d4"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8443b176821ab391a8a0ebfd41bbd959fdd68644","unresolved":true,"context_lines":[{"line_number":130,"context_line":"                      \"($running other jobs running)\""},{"line_number":131,"context_line":"            time_start async_wait"},{"line_number":132,"context_line":"            if [[ \"$pid\" !\u003d \"self\" ]]; then"},{"line_number":133,"context_line":"                # Do not actually call wait if we ran synchronously"},{"line_number":134,"context_line":"                if wait $pid; then"},{"line_number":135,"context_line":"                    rc\u003d0"},{"line_number":136,"context_line":"                else"}],"source_content_type":"application/x-shellscript","patch_set":14,"id":"257badd9_1e6f578b","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":67},"updated":"2021-02-10 17:35:13.000000000","message":"just noticed this comment should precede the \u0027if\u0027 above it","commit_id":"30d9bf9a6d8af9590b04caa3757956522f2004d4"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8443b176821ab391a8a0ebfd41bbd959fdd68644","unresolved":true,"context_lines":[{"line_number":139,"context_line":"                cat ${DEST}/async/${name}.log"},{"line_number":140,"context_line":"            fi"},{"line_number":141,"context_line":"            time_stop async_wait"},{"line_number":142,"context_line":"            local start_time"},{"line_number":143,"context_line":"            local end_time"},{"line_number":144,"context_line":"            start_time\u003d$(iniget $inifile job start_time)"},{"line_number":145,"context_line":"            end_time\u003d$(iniget $inifile job end_time)"},{"line_number":146,"context_line":"            _async_incr_bg_time $(($end_time - $start_time))"}],"source_content_type":"application/x-shellscript","patch_set":14,"id":"ce29d756_f25f8944","line":143,"range":{"start_line":142,"start_character":12,"end_line":143,"end_character":26},"updated":"2021-02-10 17:35:13.000000000","message":"could be moved up","commit_id":"30d9bf9a6d8af9590b04caa3757956522f2004d4"}],"lib/keystone":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f103fd307177da0f7e7e2656a1143320c88a29","unresolved":true,"context_lines":[{"line_number":349,"context_line":"    demo_user\u003d$(get_or_create_user \"demo\" \\"},{"line_number":350,"context_line":"        \"$ADMIN_PASSWORD\" \"default\" \"demo@example.com\")"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    async_wait ks-{domain-role,domain,project,service,reseller,anotherrole}"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    async_run ks-demo-member get_or_add_user_project_role $member_role $demo_user $demo_project"},{"line_number":355,"context_line":"    async_run ks-demo-admin get_or_add_user_project_role $admin_role $admin_user $demo_project"}],"source_content_type":"application/x-shellscript","patch_set":7,"id":"140e6f95_5ddab62f","line":352,"range":{"start_line":352,"start_character":4,"end_line":352,"end_character":75},"updated":"2021-01-26 22:37:52.000000000","message":"i like the fact we can wait on multiple things this way","commit_id":"ce240a2cc6f71f7972d32497a087b2fc3da14b19"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":318,"context_line":"    local admin_role\u003d\"admin\""},{"line_number":319,"context_line":"    local member_role\u003d\"member\""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    async_run ks-domain-role get_or_add_user_domain_role $admin_role $admin_user default"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"7709d296_902f4244","line":321,"range":{"start_line":321,"start_character":14,"end_line":321,"end_character":56},"updated":"2021-02-03 02:02:11.000000000","message":"I think func name as async name can be more clear to read in log then new names unless new names are more explainer like\n\nasync_run ks-get-add-user-domain-role get_or_add_user_domain_role $admin_role $admin_user default  \n\nBut this makes lengthy name so we can log the func name also for in async_run ?","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":318,"context_line":"    local admin_role\u003d\"admin\""},{"line_number":319,"context_line":"    local member_role\u003d\"member\""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    async_run ks-domain-role get_or_add_user_domain_role $admin_role $admin_user default"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"dce6bfe1_143cba7e","line":321,"range":{"start_line":321,"start_character":14,"end_line":321,"end_character":56},"in_reply_to":"7709d296_902f4244","updated":"2021-02-03 14:49:44.000000000","message":"Ah, I see why you said that about the name now. Yeah, I mean, we can require everything to be wrapped in a function with a good name, but it just makes it more work for everyone because places like this all need their own functions instead of just adding async_run in front.\n\nMaybe I can combine the job name and sanitized first \"command\" name in the logging and that will be descriptive enough?","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"651fb305940acb294ba55a3a355561351c4edd5e","unresolved":true,"context_lines":[{"line_number":318,"context_line":"    local admin_role\u003d\"admin\""},{"line_number":319,"context_line":"    local member_role\u003d\"member\""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    async_run ks-domain-role get_or_add_user_domain_role $admin_role $admin_user default"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"1c8d9008_520d4317","line":321,"range":{"start_line":321,"start_character":14,"end_line":321,"end_character":56},"in_reply_to":"dce6bfe1_143cba7e","updated":"2021-02-03 15:43:23.000000000","message":"yeah that will be ok with combining command in log.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""},{"line_number":325,"context_line":"    async_run ks-project get_or_create_project \"$SERVICE_PROJECT_NAME\" \"$SERVICE_DOMAIN_NAME\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    # Service role, so service users do not have to be admins"},{"line_number":328,"context_line":"    async_run ks-service get_or_create_role service"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"f2a99fbc_80053964","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":93},"updated":"2021-02-03 02:02:11.000000000","message":"do not we need to wait for SERVICE_DOMAIN_NAME to finish? keystone can error if domain does not exist.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d0da5b3a41611a56a8914b0888bdcf5e12ede93","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""},{"line_number":325,"context_line":"    async_run ks-project get_or_create_project \"$SERVICE_PROJECT_NAME\" \"$SERVICE_DOMAIN_NAME\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    # Service role, so service users do not have to be admins"},{"line_number":328,"context_line":"    async_run ks-service get_or_create_role service"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"06b06cc3_14a40f2f","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":93},"in_reply_to":"7d59fcf0_ea1634e4","updated":"2021-02-03 16:01:03.000000000","message":"Oh, sorry I see what you mean. I guess I didn\u0027t think that the second command really depended on the first, since we\u0027re not using the output from it. But maybe you\u0027re right and we\u0027re always winning that race right now. I haven\u0027t yet seen this fail, but perhaps that\u0027s just because we have fairly consistent osc latency.\n\nI will just un-async the domain creation, which won\u0027t really affect much but make sure we get that done first. In the future, we could probably do well to separate all the serially-dependent sections of this large function so we can just async_run them all in parallel, but internally they are consistent.\n\nGood spot, thanks!","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"651fb305940acb294ba55a3a355561351c4edd5e","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""},{"line_number":325,"context_line":"    async_run ks-project get_or_create_project \"$SERVICE_PROJECT_NAME\" \"$SERVICE_DOMAIN_NAME\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    # Service role, so service users do not have to be admins"},{"line_number":328,"context_line":"    async_run ks-service get_or_create_role service"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"7d59fcf0_ea1634e4","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":93},"in_reply_to":"ed129aec_686f5318","updated":"2021-02-03 15:43:23.000000000","message":"I mean what if SERVICE_DOMAIN_NAME itself not created before keystone\u0027s project creation call start looking for domain because SERVICE_DOMAIN_NAME creation is also aysnc L324.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    # Create service project/role"},{"line_number":324,"context_line":"    async_run ks-domain get_or_create_domain \"$SERVICE_DOMAIN_NAME\""},{"line_number":325,"context_line":"    async_run ks-project get_or_create_project \"$SERVICE_PROJECT_NAME\" \"$SERVICE_DOMAIN_NAME\""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    # Service role, so service users do not have to be admins"},{"line_number":328,"context_line":"    async_run ks-service get_or_create_role service"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"ed129aec_686f5318","line":325,"range":{"start_line":325,"start_character":0,"end_line":325,"end_character":93},"in_reply_to":"f2a99fbc_80053964","updated":"2021-02-03 14:49:44.000000000","message":"No, the job is:\n\n get_or_create_project($SERVICE_PROJECT_NAME, $SERVICE_DOMAIN_NAME)\n\nThat either succeeds or fails, and we collect that result when we wait for the named future \"ks-project\" on L352.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    # invisible project - admin can\u0027t see this one"},{"line_number":342,"context_line":"    local invis_project"},{"line_number":343,"context_line":"    invis_project\u003d$(get_or_create_project \"invisible_to_admin\" default)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    # demo"},{"line_number":346,"context_line":"    local demo_project"},{"line_number":347,"context_line":"    demo_project\u003d$(get_or_create_project \"demo\" default)"},{"line_number":348,"context_line":"    local demo_user"},{"line_number":349,"context_line":"    demo_user\u003d$(get_or_create_user \"demo\" \\"},{"line_number":350,"context_line":"        \"$ADMIN_PASSWORD\" \"default\" \"demo@example.com\")"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"a6464577_1f3170e6","line":347,"range":{"start_line":343,"start_character":0,"end_line":347,"end_character":56},"updated":"2021-02-03 02:02:11.000000000","message":"we can run these also in async but anyways we need to wait for them to finish at L352 so not much benefits except two project gets created in parallel?\nnot blocking for this patch can be done later.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    # invisible project - admin can\u0027t see this one"},{"line_number":342,"context_line":"    local invis_project"},{"line_number":343,"context_line":"    invis_project\u003d$(get_or_create_project \"invisible_to_admin\" default)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    # demo"},{"line_number":346,"context_line":"    local demo_project"},{"line_number":347,"context_line":"    demo_project\u003d$(get_or_create_project \"demo\" default)"},{"line_number":348,"context_line":"    local demo_user"},{"line_number":349,"context_line":"    demo_user\u003d$(get_or_create_user \"demo\" \\"},{"line_number":350,"context_line":"        \"$ADMIN_PASSWORD\" \"default\" \"demo@example.com\")"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"516fbe76_b64a772b","line":347,"range":{"start_line":343,"start_character":0,"end_line":347,"end_character":56},"in_reply_to":"a6464577_1f3170e6","updated":"2021-02-03 14:49:44.000000000","message":"Well, the reason I didn\u0027t async them is that their output is used to set invis_project and demo_project, which we can\u0027t cleanly get to set the variable. I can work on trying to cleanly grab the stdout of the thing we run in the background, separate from its tracing, but I think there\u0027s a lot more easy stuff to work on and we can save that for later if we\u0027re looking for more to squeeze.\n\nRight now, we\u0027re already running six other things in the background while we do these two things in series with the main thread, which is pretty decent.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    # groups"},{"line_number":371,"context_line":"    local admin_group"},{"line_number":372,"context_line":"    admin_group\u003d$(get_or_create_group \"admins\" \\"},{"line_number":373,"context_line":"        \"default\" \"openstack admin group\")"},{"line_number":374,"context_line":"    local non_admin_group"},{"line_number":375,"context_line":"    non_admin_group\u003d$(get_or_create_group \"nonadmins\" \\"},{"line_number":376,"context_line":"        \"default\" \"non-admin group\")"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    async_run ks-group-memberdemo get_or_add_group_project_role $member_role $non_admin_group $demo_project"},{"line_number":379,"context_line":"    async_run ks-group-anotherdemo get_or_add_group_project_role $another_role $non_admin_group $demo_project"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"9f03d269_f2688581","line":376,"range":{"start_line":372,"start_character":0,"end_line":376,"end_character":36},"updated":"2021-02-03 02:02:11.000000000","message":"ditto, but I think group creation does not take much time so it may be fine? not blocking for this patch can be done later.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"}],"lib/nova":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":347,"context_line":"            nova_api_url\u003d\"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST/compute\""},{"line_number":348,"context_line":"        fi"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        get_or_create_service \"nova_legacy\" \"compute_legacy\" \"Nova Compute Service (Legacy 2.0)\""},{"line_number":351,"context_line":"        get_or_create_endpoint \\"},{"line_number":352,"context_line":"            \"compute_legacy\" \\"},{"line_number":353,"context_line":"            \"$REGION_NAME\" \\"},{"line_number":354,"context_line":"            \"$nova_api_url/v2/\\$(project_id)s\""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        get_or_create_service \"nova\" \"compute\" \"Nova Compute Service\""},{"line_number":357,"context_line":"        get_or_create_endpoint \\"},{"line_number":358,"context_line":"            \"compute\" \\"},{"line_number":359,"context_line":"            \"$REGION_NAME\" \\"},{"line_number":360,"context_line":"            \"$nova_api_url/v2.1\""},{"line_number":361,"context_line":"    fi"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    if is_service_enabled n-api; then"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"02739f36_4d37af61","line":360,"range":{"start_line":350,"start_character":0,"end_line":360,"end_character":32},"updated":"2021-02-03 02:02:11.000000000","message":"we can run these also in parallel as these are two separate endpoints. not blocking for this patch can be done later.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":347,"context_line":"            nova_api_url\u003d\"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST/compute\""},{"line_number":348,"context_line":"        fi"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        get_or_create_service \"nova_legacy\" \"compute_legacy\" \"Nova Compute Service (Legacy 2.0)\""},{"line_number":351,"context_line":"        get_or_create_endpoint \\"},{"line_number":352,"context_line":"            \"compute_legacy\" \\"},{"line_number":353,"context_line":"            \"$REGION_NAME\" \\"},{"line_number":354,"context_line":"            \"$nova_api_url/v2/\\$(project_id)s\""},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        get_or_create_service \"nova\" \"compute\" \"Nova Compute Service\""},{"line_number":357,"context_line":"        get_or_create_endpoint \\"},{"line_number":358,"context_line":"            \"compute\" \\"},{"line_number":359,"context_line":"            \"$REGION_NAME\" \\"},{"line_number":360,"context_line":"            \"$nova_api_url/v2.1\""},{"line_number":361,"context_line":"    fi"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    if is_service_enabled n-api; then"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"85866db8_ae6c538d","line":360,"range":{"start_line":350,"start_character":0,"end_line":360,"end_character":32},"in_reply_to":"02739f36_4d37af61","updated":"2021-02-03 14:49:44.000000000","message":"Yeah, there\u0027s *lots* more stuff to async. I grabbed some heavy hitters from nova that I knew of, as well as a bunch of the base keystone stuff I know goes slow. There\u0027s more to do in neutron, nova, ... everything :)","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"},{"line_number":772,"context_line":"        for i in $(seq 0 $NOVA_NUM_CELLS); do"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"31ee70cb_1441e4df","line":769,"range":{"start_line":769,"start_character":0,"end_line":769,"end_character":110},"updated":"2021-02-03 02:02:11.000000000","message":"can we move this too after L773 in case cell0 DB is not created and we end up with cellmapping in DB? or is it fine as if no cell0 we are going to have error anyways?","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"651fb305940acb294ba55a3a355561351c4edd5e","unresolved":true,"context_lines":[{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"},{"line_number":772,"context_line":"        for i in $(seq 0 $NOVA_NUM_CELLS); do"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"b3b62f03_c9b1c90d","line":769,"range":{"start_line":769,"start_character":0,"end_line":769,"end_character":110},"in_reply_to":"28fbe442_1609c6b4","updated":"2021-02-03 15:43:23.000000000","message":"ack.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"},{"line_number":772,"context_line":"        for i in $(seq 0 $NOVA_NUM_CELLS); do"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"28fbe442_1609c6b4","line":769,"range":{"start_line":769,"start_character":0,"end_line":769,"end_character":110},"in_reply_to":"31ee70cb_1441e4df","updated":"2021-02-03 14:49:44.000000000","message":"I dunno, maybe. Every time I make a change like that I need to run devstack and make sure that didn\u0027t break nova or something else, so I didn\u0027t re-arrange things for this initial version that I wasn\u0027t sure about.\n\nThis should be fairly fast I *think*. Not everything has to be split out of the main thread, otherwise the main thread isnt doing any work. In this case, the main thread does api_db sync and this quick cell0 mapping, but it ends up waiting plenty long for all the cell db syncs on the next few lines, so there isn\u0027t much savings in wall clock time to be had anyway.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":793,"context_line":"# install_novaclient() - Collect source and prepare"},{"line_number":794,"context_line":"function install_novaclient {"},{"line_number":795,"context_line":"    if use_library_from_git \"python-novaclient\"; then"},{"line_number":796,"context_line":"        git_clone_by_name \"python-novaclient\""},{"line_number":797,"context_line":"        setup_dev_lib \"python-novaclient\""},{"line_number":798,"context_line":"        sudo install -D -m 0644 -o $STACK_USER {${GITDIR[\"python-novaclient\"]}/tools/,/etc/bash_completion.d/}nova.bash_completion"},{"line_number":799,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"9467bd32_4a28a3c8","line":796,"range":{"start_line":796,"start_character":8,"end_line":796,"end_character":26},"updated":"2021-02-03 02:02:11.000000000","message":"something for next step if we can make these clone also running in parallel, not just this but for all the git clone.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":793,"context_line":"# install_novaclient() - Collect source and prepare"},{"line_number":794,"context_line":"function install_novaclient {"},{"line_number":795,"context_line":"    if use_library_from_git \"python-novaclient\"; then"},{"line_number":796,"context_line":"        git_clone_by_name \"python-novaclient\""},{"line_number":797,"context_line":"        setup_dev_lib \"python-novaclient\""},{"line_number":798,"context_line":"        sudo install -D -m 0644 -o $STACK_USER {${GITDIR[\"python-novaclient\"]}/tools/,/etc/bash_completion.d/}nova.bash_completion"},{"line_number":799,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"149001eb_4caba8e2","line":796,"range":{"start_line":796,"start_character":8,"end_line":796,"end_character":26},"in_reply_to":"9467bd32_4a28a3c8","updated":"2021-02-03 14:49:44.000000000","message":"Yes! I definitely want to play with parallelizing some of that stuff, but I think we will need to split out the git-clone from the install, because pip does not seem to be thread safe when loading deps.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":763,"context_line":"        $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CONF api_db sync"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        # map_cell0 will create the cell mapping record in the nova_api DB so"},{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"127d322a_9e68130b","line":768,"range":{"start_line":766,"start_character":60,"end_line":768,"end_character":35},"updated":"2021-02-07 10:51:35.000000000","message":"This is false now.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":763,"context_line":"        $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CONF api_db sync"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        # map_cell0 will create the cell mapping record in the nova_api DB so"},{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"f080330f_51baf09f","line":768,"range":{"start_line":766,"start_character":60,"end_line":768,"end_character":35},"in_reply_to":"127d322a_9e68130b","updated":"2021-02-09 18:16:45.000000000","message":"So should it be removed? - which means \"we did not want it\"; or should the code work differently?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"30a2d22f6eb53b5a52a669f5df130b1146b008e8","unresolved":true,"context_lines":[{"line_number":763,"context_line":"        $NOVA_BIN_DIR/nova-manage --config-file $NOVA_CONF api_db sync"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        # map_cell0 will create the cell mapping record in the nova_api DB so"},{"line_number":766,"context_line":"        # this needs to come after the api_db sync happens. We also want to run"},{"line_number":767,"context_line":"        # this before the db sync below since that will migrate both the nova"},{"line_number":768,"context_line":"        # and nova_cell0 databases."},{"line_number":769,"context_line":"        $NOVA_BIN_DIR/nova-manage cell_v2 map_cell0 --database_connection `database_connection_url nova_cell0`"},{"line_number":770,"context_line":""},{"line_number":771,"context_line":"        # Wait for DBs to finish from above"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"42db8438_dc1ea9d2","line":768,"range":{"start_line":766,"start_character":60,"end_line":768,"end_character":35},"in_reply_to":"f080330f_51baf09f","updated":"2021-02-09 18:30:52.000000000","message":"Sorry, meant to ack this. Already changed locally :)","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"}],"stack.sh":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":"    create_keystone_accounts"},{"line_number":1084,"context_line":"    if is_service_enabled nova; then"},{"line_number":1085,"context_line":"        async_runfunc create_nova_accounts"},{"line_number":1086,"context_line":"    fi"},{"line_number":1087,"context_line":"    if is_service_enabled glance; then"},{"line_number":1088,"context_line":"        async_runfunc create_glance_accounts"},{"line_number":1089,"context_line":"    fi"}],"source_content_type":"text/x-sh","patch_set":10,"id":"d9aa90a3_2d7b559f","line":1086,"range":{"start_line":1085,"start_character":0,"end_line":1086,"end_character":6},"updated":"2021-02-03 02:02:11.000000000","message":"+1, this is helpful and as each service has multiple endpoint creation, we can do create each endpoint in parallel too https://review.opendev.org/c/openstack/devstack/+/771505/10/lib/nova#360","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":1483,"context_line":"# Make sure we didn\u0027t leak any background tasks"},{"line_number":1484,"context_line":"async_cleanup"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"# Dump out the time totals"},{"line_number":1487,"context_line":"time_totals"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"# Using the cloud"},{"line_number":1490,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-sh","patch_set":10,"id":"b9095eaa_28f6e41e","line":1487,"range":{"start_line":1486,"start_character":0,"end_line":1487,"end_character":11},"updated":"2021-02-03 02:02:11.000000000","message":"we can echo some thing about devstack ran in parallel here\n\n- https://github.com/openstack/devstack/blob/a9afdb18b4ac40ed39c32c719b3bd2fc97906598/functions-common#L2396","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"651fb305940acb294ba55a3a355561351c4edd5e","unresolved":true,"context_lines":[{"line_number":1483,"context_line":"# Make sure we didn\u0027t leak any background tasks"},{"line_number":1484,"context_line":"async_cleanup"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"# Dump out the time totals"},{"line_number":1487,"context_line":"time_totals"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"# Using the cloud"},{"line_number":1490,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-sh","patch_set":10,"id":"2e3760d5_0b80aa1b","line":1487,"range":{"start_line":1486,"start_character":0,"end_line":1487,"end_character":11},"in_reply_to":"1322d39d_057c93cc","updated":"2021-02-03 15:43:23.000000000","message":"ack, agree that is enough. time per job will be awesome.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6973c7a2017a95d94e3fea40832fe36bcacf8153","unresolved":true,"context_lines":[{"line_number":1483,"context_line":"# Make sure we didn\u0027t leak any background tasks"},{"line_number":1484,"context_line":"async_cleanup"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"# Dump out the time totals"},{"line_number":1487,"context_line":"time_totals"},{"line_number":1488,"context_line":""},{"line_number":1489,"context_line":"# Using the cloud"},{"line_number":1490,"context_line":"# \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-sh","patch_set":10,"id":"1322d39d_057c93cc","line":1487,"range":{"start_line":1486,"start_character":0,"end_line":1487,"end_character":11},"in_reply_to":"b9095eaa_28f6e41e","updated":"2021-02-03 14:49:44.000000000","message":"We already do, because of this:\n\nhttps://review.opendev.org/c/openstack/devstack/+/771505/10/inc/async#97\n\nSo we get a time spent doing async_wait, which gives you an idea of how much stuff got done in the background while other stuff got done.\n\nLater I could look at trying to collect time spent in each job separately so that we can figure out how much work we did total, divided by actual wall clock time to figure out speedup. I guess that would help us also show that this does work in the CI workers whenever that speedup was \u003e1. But, that\u0027s mostly just reporting, we know this is faster so... later :)","commit_id":"40073984124995dda410f9f55cf1624139a690fb"}],"unstack.sh":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c99eebd5462d6f38ec65e78389ccc1e7a9432425","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":10,"id":"a724022f_a47fab5c","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"updated":"2021-02-03 02:02:11.000000000","message":"please add this in clean.sh script too.","commit_id":"40073984124995dda410f9f55cf1624139a690fb"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"ea0f633dc3b8625a877e3b4921c27b6eb74e5811","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"98b5d3e7_7e98c780","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"updated":"2021-02-07 10:51:35.000000000","message":"Regarding this directory and its control. I think we should create it and ensure it\u0027s empty on each stack run to avoid confusion. Its contents from the previous run are not that relevant.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"db45c644c84e53d6dacbe1fca5242f0cc41e2d3b","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"e3d186f0_06293287","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"in_reply_to":"4b3abb91_7ad63fcf","updated":"2021-02-09 18:16:45.000000000","message":"For creation - under \"Configure Target Directories\" in stack.sh makes most sense to me (this could be an async_init function invocation).\nFor removal - why not async_cleanup to do it? Dump the details and clean it up.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4ae3d56f0743de627a6eeb59b1c071f5be293e54","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"e9156975_f87d6815","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"in_reply_to":"98b5d3e7_7e98c780","updated":"2021-02-08 14:44:10.000000000","message":"Where do you want me to do that?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"afcc72e1f9f19ccef477101c560b1f88560249ad","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"e6a954f5_2ad208cb","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"in_reply_to":"e3d186f0_06293287","updated":"2021-02-09 18:37:28.000000000","message":"Because it contains residue that would be useful for debugging after a run (even without a failure). The async_cleanup() is mostly to make sure we wait for any children that got ignored, and to warn about that case.\n\nYou could argue that if everything went fine we should nuke the directory there, but I think it\u0027d be a lot better to just keep it until actual cleaning. Imagine if we nuked the main devstack log because everything seemed fine because obviously there\u0027s nothing to debug :)","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"df1f8c0c51c925c1c8b775e83e3840cbf0bb914a","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"6f56b44f_9e84f80b","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"in_reply_to":"e6a954f5_2ad208cb","updated":"2021-02-09 18:47:38.000000000","message":"Haha, good point. Perhaps then rethink the idea - create in stack.sh and make sure it is clean there on the start. I don\u0027t see how running with it filled in would help. I can only think of how it could increase confusion.","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9c5cf6eb342232c4d2040601e66901430ccd50dd","unresolved":true,"context_lines":[{"line_number":184,"context_line":"fi"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"clean_pyc_files"},{"line_number":187,"context_line":"rm -Rf $DEST/async"}],"source_content_type":"text/x-sh","patch_set":11,"id":"4b3abb91_7ad63fcf","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":18},"in_reply_to":"e9156975_f87d6815","updated":"2021-02-08 15:20:56.000000000","message":"maybe early in stackrc? im kind of ok with doing it here however.\nunless we move it to an async_init function ?","commit_id":"d362c56cb9085dad014d2e3bebed649edae01461"}]}
