)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"280948ca9040e57748dd59109add7b0d75da5b36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e9ae77ef_ec5ed313","updated":"2025-04-15 12:03:24.000000000","message":"Lets see what the CI thinks but I assume this will work.","commit_id":"a95dcecda943cab9d2d76cb3292b9893058c434d"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"fea09718d74ae5293fb36b7423ef166646fb309b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8b8f9c28_23c27566","updated":"2025-04-21 07:00:45.000000000","message":"LGTM","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d9593d99_f7b960e7","updated":"2025-04-22 07:55:07.000000000","message":"Thanks! I see couple of future issue we should prevent know by being a bit more careful. Sorry I missed this in the original review where I suggested a blind replacement of time.sleep() with cooperative_yield.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"829516a6b0c80147e2b97b068b2bbf557a18d38e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b1fa27d5_b2240098","updated":"2025-04-22 08:14:27.000000000","message":"also as a follow up, we should review all the pre-existing time.sleep() calls in the code and:\n* all time.sleep(0) is probably a cooperative yield and we should replace it with the new indirection\n* all time.sleep(x, x\u003e0) is either a real sleep and we should keep it or maybe a cooperative yield where the original author did not know that sleep(0) would have been enough for that.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64f3564280aeea06025e512c466dd4ffdd984cdf","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2058c850_6c5acb69","in_reply_to":"b1fa27d5_b2240098","updated":"2025-04-24 13:41:24.000000000","message":"This is open but for a follow up patch.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a6e29b83_41a9b8c0","updated":"2025-04-22 12:47:09.000000000","message":"-1 is just for importing funcitons not modules","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"751337763f9a400cf2b560ece85aabee1d751acd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3c5e1653_65526259","updated":"2025-04-22 13:18:56.000000000","message":"Looks good other than what Sean noted about the imports. And we somehow broke the functional test.","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b6fe8e08_f899c338","updated":"2025-04-22 10:07:32.000000000","message":"Thanks for review!","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"79dc8da670dc97c052419ee59fd0d61ec7a762c0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1effd972_00d6d5ff","in_reply_to":"3c5e1653_65526259","updated":"2025-04-22 20:04:45.000000000","message":"so in my version of this i makde calling time.sleep condtional on if we are monkey patched\nhttps://review.opendev.org/c/openstack/nova/+/922497/5/nova/utils.py#96\n\nim not sure if that is related.","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"175424b0c6cab7f2301f06e8a9032c7625c6cec1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c3ac80d7_5d9d758a","updated":"2025-04-23 13:32:33.000000000","message":"Thanks for reviews, tests failed because of RecursionError so I modified time mock","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f28297310a7c238e01f1198388a9592915b5485b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c1bd3d28_479354e4","updated":"2025-04-24 11:48:41.000000000","message":"fix the pep8 violations and then I think it is good to go","commit_id":"4aa0409d8bd395279a4c0252f1540b001a1591bd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"111b2a0ee9fb3d5dc77fec7a5a921a3afe4bf5a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d6f5a956_6932fa5a","updated":"2025-04-24 13:39:51.000000000","message":"If CI green then I think this is good to go","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b66f217dbaf7a2f6a4c4443f0bbf49848833ece2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"41f2d5af_50609691","updated":"2025-04-26 11:00:03.000000000","message":"```\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif [None req-9d5b11ed-cc77-4fcf-8ad7-889ee8b88afa tempest-AttachInterfacesTestJSON-1920379895 tempest-AttachInterfacesTestJSON-1920379895-project-member] Failed to unplug vif VIFOpenVSwitch(active\u003dTrue,address\u003dfa:16:3e:40:b8:22,bridge_name\u003d\u0027br-int\u0027,has_traffic_filtering\u003dTrue,id\u003d1437a242-92d4-46c0-bff0-c544291168bd,network\u003dNetwork(87d24d36-cee8-4938-aed6-5bca75a8d322),plugin\u003d\u0027ovs\u0027,port_profile\u003dVIFPortProfileOpenVSwitch,preserve_on_delete\u003dFalse,vif_name\u003d\u0027tap1437a242-92\u0027): RuntimeError: This event loop is already running\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif Traceback (most recent call last):\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/os_vif/__init__.py\", line 110, in unplug\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     plugin.unplug(vif, instance_info)\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/vif_plug_ovs/ovs.py\", line 492, in unplug\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     if ip_lib.exists(linux_bridge_name):\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/os_vif/internal/ip/linux/impl_pyroute2.py\", line 118, in exists\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     with iproute.IPRoute() as ip:\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif          ^^^^^^^^^^^^^^^^^\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/pyroute2/iproute/linux.py\", line 2653, in __init__\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     self.asyncore.event_loop.run_until_complete(\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/usr/lib/python3.12/asyncio/base_events.py\", line 663, in run_until_complete\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     self._check_running()\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/usr/lib/python3.12/asyncio/base_events.py\", line 622, in _check_running\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     raise RuntimeError(\u0027This event loop is already running\u0027)\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif RuntimeError: This event loop is already running\n```\nhttps://zuul.opendev.org/t/openstack/build/d24f73aa92ec442bb6c421fd21f5abc5/log/controller/logs/screen-n-cpu.txt#33787","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e06565a8163e21c470a23c2bebf1aeff2a063885","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ffea155e_ddd64da5","updated":"2025-04-25 12:29:12.000000000","message":"recheck\n\n```\n+ /opt/stack/nova/roles/run-evacuate-hook/files/test_evacuate.sh:main:16 :   echo \u0027Timed out waiting for controller compute service to be enabled\u0027\nTimed out waiting for controller compute service to be enabled\n+ /opt/stack/nova/roles/run-evacuate-hook/files/test_evacuate.sh:main:17 :   exit 5\n```\n\n```\nApr 25 09:56:50.206870 np0040536092 nova-compute[61903]: ERROR oslo_service.periodic_task libvirt.libvirtError: Failed to connect socket to \u0027/var/run/libvirt/libvirt-sock\u0027: No such file or directory\n```","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f18b7a1e74ab8914265afd68e41a3b97126ae281","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3a3a883f_0d109539","updated":"2025-04-26 11:13:04.000000000","message":"recheck interface detach failed with strange os_vif error talking about an event loop in pyroute2 lib. This might be a red herring or a real issue caused by this or recent eventlet related changes. What sounds very bad that this fails in python\u0027s asyncio lib.\n\n```\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/usr/lib/python3.12/asyncio/base_events.py\", line 663, in run_until_complete\n```\n\n\npyroute2 0.9.1 we run with is only couple of weeks old. And the changelog shows for 0.9.1:\n```\ncore: rewritten using asyncio, and the async API is now first class\n```\nhttps://github.com/svinota/pyroute2/blob/master/CHANGELOG.rst\n\n\n\ntest_create_list_show_delete_interfaces_by_fixed_ip\nhttps://zuul.opendev.org/t/openstack/build/d24f73aa92ec442bb6c421fd21f5abc5/log/controller/logs/screen-n-cpu.txt#33787\n\n```\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif [None req-9d5b11ed-cc77-4fcf-8ad7-889ee8b88afa tempest-AttachInterfacesTestJSON-1920379895 tempest-AttachInterfacesTestJSON-1920379895-project-member] Failed to unplug vif VIFOpenVSwitch(active\u003dTrue,address\u003dfa:16:3e:40:b8:22,bridge_name\u003d\u0027br-int\u0027,has_traffic_filtering\u003dTrue,id\u003d1437a242-92d4-46c0-bff0-c544291168bd,network\u003dNetwork(87d24d36-cee8-4938-aed6-5bca75a8d322),plugin\u003d\u0027ovs\u0027,port_profile\u003dVIFPortProfileOpenVSwitch,preserve_on_delete\u003dFalse,vif_name\u003d\u0027tap1437a242-92\u0027): RuntimeError: This event loop is already running\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif Traceback (most recent call last):\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/os_vif/__init__.py\", line 110, in unplug\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     plugin.unplug(vif, instance_info)\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/vif_plug_ovs/ovs.py\", line 492, in unplug\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     if ip_lib.exists(linux_bridge_name):\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/os_vif/internal/ip/linux/impl_pyroute2.py\", line 118, in exists\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     with iproute.IPRoute() as ip:\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif          ^^^^^^^^^^^^^^^^^\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/opt/stack/data/venv/lib/python3.12/site-packages/pyroute2/iproute/linux.py\", line 2653, in __init__\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     self.asyncore.event_loop.run_until_complete(\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/usr/lib/python3.12/asyncio/base_events.py\", line 663, in run_until_complete\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     self._check_running()\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif   File \"/usr/lib/python3.12/asyncio/base_events.py\", line 622, in _check_running\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif     raise RuntimeError(\u0027This event loop is already running\u0027)\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif RuntimeError: This event loop is already running\nApr 25 13:14:42.402621 np0040537420 nova-compute[74472]: ERROR os_vif","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41ed67592df649dfd88d5e498afcdbf2912e5ddc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fac74e83_230e55e8","updated":"2025-04-27 19:13:01.000000000","message":"recheck multiple volume build ERRORs","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9d233f8c49a8918ef1a0c9a04c23f77081b82cda","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"31c37bdf_5ae7d89e","updated":"2025-04-27 14:24:48.000000000","message":"recheck multistore\n```\nDetails: {\u0027message\u0027: \u0027Image 345b1922-5189-4d6f-a7af-bf28c7226051 could not be deleted because it is in use: The image cannot be deleted because it is in use through the backend store outside of Glance.\u003cbr /\u003e\u003cbr /\u003e\\n\\n\\n\u0027, \u0027code\u0027: \u0027409 Conflict\u0027, \u0027title\u0027: \u0027Conflict\u0027}\n```\nWe hit the exact same issue with this patch a couple of rechecks ago. It would make sense to check if this happened before without this patch as well.","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"19d44811ca1ac6adfe18c43815155b400463825c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9b61765a_ff559531","updated":"2025-04-25 09:34:19.000000000","message":"recheck multistore \n```\nImage 6b272523-91e6-4adf-8ae1-a741519bb16e could not be deleted because it is in use: The image cannot be deleted because it is in use through the backend store outside of Glance\n```","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"82c93c317503005987c22792fcf09946ab2cd7b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1ce2917c_830897f7","updated":"2025-04-28 06:01:59.000000000","message":"recheck tempest-ipv6 nova-compute failed to start deo to libvirt:\n```\nApr 27 21:12:04.511338 np0040548004 nova-compute[82419]: WARNING nova.virt.libvirt.host [None req-eee23af1-080d-4d03-9b2c-c2c6fd36e3f7 None None] URI qemu:///system does not support events: internal error: could not initialize domain event timer: libvirt.libvirtError: internal error: could not initialize domain event timer\n```","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6bdcf4aca4839f2ab55577622fb51a3cec13d95d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3380ef3b_c632116c","updated":"2025-04-27 11:01:08.000000000","message":"recheck timeout sshing into a guest","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b31c7c5e5d189bd301200ac37079d9875e4fd2e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"36e0a50e_f2dd449e","updated":"2025-04-25 06:53:42.000000000","message":"recheck timing out sshing into a guest","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d5b0ddaf700efb37646f86e4015698512de7d462","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"efe1c022_4d637fe5","updated":"2025-04-26 14:54:16.000000000","message":"recheck unrelated glance tempest test failed \ntempest.api.image.v2.test_images_dependency.ImageDependencyTests.test_nova_image_snapshot_dependency[compute,id-d19b0731-e98e-4103-8b0e-02f651b8f586]","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4ec6e2945f89268dabaf2a4952429aedf8b5ec89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c44855a5_b237ace2","in_reply_to":"31c37bdf_5ae7d89e","updated":"2025-04-27 15:12:12.000000000","message":"OK. I hit other patches so this is not specific to this change.\n\n```\n❯ logsearch log --project openstack/nova --job-group nova-devstack --result FAILURE --days 14  \"The image cannot be deleted because it is in use through the backend store outside of Glance\"                     ─╯\n\n...\n\nBuilds with matching logs 5/35:\n+----------------------------------+---------------------+----------+-----------------------------------+--------+----------------------+\n| uuid                             | finished            | pipeline | review                            | branch | job                  |\n+----------------------------------+---------------------+----------+-----------------------------------+--------+----------------------+\n| 5f7dccf493cf4b9d87d87a8f0a052192 | 2025-04-27T12:37:50 | check    | https://review.opendev.org/947212 | master | nova-ceph-multistore |\n| c7f28ff023b747849862c96817ffccdb | 2025-04-26T12:36:32 | check    | https://review.opendev.org/947212 | master | nova-ceph-multistore |\n| f94c9e6667874556849f625a01964367 | 2025-04-25T14:16:05 | check    | https://review.opendev.org/922496 | master | nova-ceph-multistore |\n| f169e50cabbf4e65a89a922b6ac9b29e | 2025-04-25T13:08:02 | check    | https://review.opendev.org/947966 | master | nova-ceph-multistore |\n| 0e53881b2e694ff8996b55bf7c477e79 | 2025-04-25T08:27:00 | check    | https://review.opendev.org/947212 | master | nova-ceph-multistore |\n+----------------------------------+---------------------+----------+-----------------------------------+--------+----------------------+\n```","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9315b7f2f41e2429916b764f3322d49e5bc07b54","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"574dd0ff_f7f797c7","in_reply_to":"3a3a883f_0d109539","updated":"2025-04-26 11:19:58.000000000","message":"pyroute2 0.9.1. version bump is porposed to be reverted https://review.opendev.org/c/openstack/requirements/+/948283","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14bb56c2d375d22ada2da408e83cd189751fd7c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e5bd2644_d3ac2147","in_reply_to":"574dd0ff_f7f797c7","updated":"2025-04-26 14:54:39.000000000","message":"revert merged.","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2c5e80feb4c5eb9fe30a52563049b39995737c61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c1f9435a_cdd715fe","in_reply_to":"c44855a5_b237ace2","updated":"2025-04-27 15:33:24.000000000","message":"filed https://bugs.launchpad.net/glance/+bug/2109428","commit_id":"3946a94538840df90836ab18c42c6f56490efe7a"}],"nova/compute/manager.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1e844ea009870c04b7dc84a0d99b5f30d11c54c8","unresolved":true,"context_lines":[{"line_number":10848,"context_line":"        \"\"\"Updates the volume usage cache table with a list of stats.\"\"\""},{"line_number":10849,"context_line":"        for usage in vol_usages:"},{"line_number":10850,"context_line":"            # Allow switching of greenthreads between queries."},{"line_number":10851,"context_line":"            time.sleep(0)"},{"line_number":10852,"context_line":"            vol_usage \u003d objects.VolumeUsage(context)"},{"line_number":10853,"context_line":"            vol_usage.volume_id \u003d usage[\u0027volume\u0027]"},{"line_number":10854,"context_line":"            vol_usage.instance_uuid \u003d usage[\u0027instance\u0027].uuid"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf3993e5_bd100512","line":10851,"updated":"2025-04-15 13:00:11.000000000","message":"nit: my only reservation is when i did this\ni createa a copertive_yeild function for the special case of time.sleep(0)\n\nto make it clare that we could remove them and document what they are.\n\nso this is fine i think just we may want to consier if we want to repalce all the time.sleep(0) later with copertive_yeild or similar.\n\nevenutally when eventlet is removed we will delete all teh time.sleep(0) statement regardless of the name so its fine either way","commit_id":"a95dcecda943cab9d2d76cb3292b9893058c434d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1dba8f684a96d1583a68137adc141a81d264c589","unresolved":true,"context_lines":[{"line_number":10848,"context_line":"        \"\"\"Updates the volume usage cache table with a list of stats.\"\"\""},{"line_number":10849,"context_line":"        for usage in vol_usages:"},{"line_number":10850,"context_line":"            # Allow switching of greenthreads between queries."},{"line_number":10851,"context_line":"            time.sleep(0)"},{"line_number":10852,"context_line":"            vol_usage \u003d objects.VolumeUsage(context)"},{"line_number":10853,"context_line":"            vol_usage.volume_id \u003d usage[\u0027volume\u0027]"},{"line_number":10854,"context_line":"            vol_usage.instance_uuid \u003d usage[\u0027instance\u0027].uuid"}],"source_content_type":"text/x-python","patch_set":1,"id":"cb0078a4_692664a6","line":10851,"in_reply_to":"bf3993e5_bd100512","updated":"2025-04-15 13:28:34.000000000","message":"good point. We want eventlet.sleep(0) to be noop in threading mode instead of time.sleep(0) as we should not force a thread switch with time.sleep(0) in threading mode. \n\n@ksambor@redhat.com how do you feel about doing a follow up where you take the new and pre-existing time.sleep(0) calls and hide it behind a cooperative_yield() call. Today that function can be implemented with time.sleep(0). When we start branching eventlet / non-eventlet code paths due to oslo.service backend change we will build a facility to check a global to know if we are running in eventlet or threading mode, and that time we can re-implement cooperative_yield to be noop for the threading mode while keeping time.sleep(0) for eventlet mode.","commit_id":"a95dcecda943cab9d2d76cb3292b9893058c434d"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"caa7027916daaae10402b8da0a1de202b989e76d","unresolved":true,"context_lines":[{"line_number":10848,"context_line":"        \"\"\"Updates the volume usage cache table with a list of stats.\"\"\""},{"line_number":10849,"context_line":"        for usage in vol_usages:"},{"line_number":10850,"context_line":"            # Allow switching of greenthreads between queries."},{"line_number":10851,"context_line":"            time.sleep(0)"},{"line_number":10852,"context_line":"            vol_usage \u003d objects.VolumeUsage(context)"},{"line_number":10853,"context_line":"            vol_usage.volume_id \u003d usage[\u0027volume\u0027]"},{"line_number":10854,"context_line":"            vol_usage.instance_uuid \u003d usage[\u0027instance\u0027].uuid"}],"source_content_type":"text/x-python","patch_set":1,"id":"ebf70e98_607e3b55","line":10851,"in_reply_to":"cb0078a4_692664a6","updated":"2025-04-18 10:15:24.000000000","message":"Done, thanks!","commit_id":"a95dcecda943cab9d2d76cb3292b9893058c434d"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":10848,"context_line":"        \"\"\"Updates the volume usage cache table with a list of stats.\"\"\""},{"line_number":10849,"context_line":"        for usage in vol_usages:"},{"line_number":10850,"context_line":"            # Allow switching of greenthreads between queries."},{"line_number":10851,"context_line":"            time.sleep(0)"},{"line_number":10852,"context_line":"            vol_usage \u003d objects.VolumeUsage(context)"},{"line_number":10853,"context_line":"            vol_usage.volume_id \u003d usage[\u0027volume\u0027]"},{"line_number":10854,"context_line":"            vol_usage.instance_uuid \u003d usage[\u0027instance\u0027].uuid"}],"source_content_type":"text/x-python","patch_set":1,"id":"f69c9132_f997c110","line":10851,"in_reply_to":"ebf70e98_607e3b55","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"a95dcecda943cab9d2d76cb3292b9893058c434d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":1824,"context_line":"                             \u0027vol_status\u0027: volume_status})"},{"line_number":1825,"context_line":"                break"},{"line_number":1826,"context_line":"            utils.cooperative_yield("},{"line_number":1827,"context_line":"                CONF.block_device_allocate_retries_interval)"},{"line_number":1828,"context_line":"        raise exception.VolumeNotCreated(volume_id\u003dvol_id,"},{"line_number":1829,"context_line":"                                         seconds\u003dint(time.time() - start),"},{"line_number":1830,"context_line":"                                         attempts\u003dattempt,"}],"source_content_type":"text/x-python","patch_set":2,"id":"b85ed639_ef48675d","line":1827,"updated":"2025-04-22 07:55:07.000000000","message":"This is a retry loop where we want to wait between retry attempt, this needs to be kept for the treading mode as well, so here we need time.sleep(CONF.block_device_allocate_retries_interval) explicitly.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":1824,"context_line":"                             \u0027vol_status\u0027: volume_status})"},{"line_number":1825,"context_line":"                break"},{"line_number":1826,"context_line":"            utils.cooperative_yield("},{"line_number":1827,"context_line":"                CONF.block_device_allocate_retries_interval)"},{"line_number":1828,"context_line":"        raise exception.VolumeNotCreated(volume_id\u003dvol_id,"},{"line_number":1829,"context_line":"                                         seconds\u003dint(time.time() - start),"},{"line_number":1830,"context_line":"                                         attempts\u003dattempt,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f6224bf9_ad9a8354","line":1827,"in_reply_to":"b85ed639_ef48675d","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":1824,"context_line":"                             \u0027vol_status\u0027: volume_status})"},{"line_number":1825,"context_line":"                break"},{"line_number":1826,"context_line":"            time.sleep("},{"line_number":1827,"context_line":"                CONF.block_device_allocate_retries_interval)"},{"line_number":1828,"context_line":"        raise exception.VolumeNotCreated(volume_id\u003dvol_id,"},{"line_number":1829,"context_line":"                                         seconds\u003dint(time.time() - start),"},{"line_number":1830,"context_line":"                                         attempts\u003dattempt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"0947efd1_fa9d3207","line":1827,"updated":"2025-04-22 12:47:09.000000000","message":"i agree that keeping this as an explict time.sleep makes sense as it clear that this really is a timed sleep that is installer configurable.","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"}],"nova/tests/unit/test_service.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":39,"context_line":"from nova import service"},{"line_number":40,"context_line":"from nova import test"},{"line_number":41,"context_line":"from nova.tests.unit import utils"},{"line_number":42,"context_line":"from nova.utils import cooperative_yield"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"test_service_opts \u003d ["},{"line_number":45,"context_line":"    cfg.HostAddressOpt(\"test_service_listen\","}],"source_content_type":"text/x-python","patch_set":3,"id":"09c2011e_2d9be54b","line":42,"updated":"2025-04-22 12:47:09.000000000","message":"-1\n\nwe do not allow importing function in nova or openstack in general.\n\nour codeing convetion (which i think  is enforced by hacking) is that we only import modules.\n\nso you shoudl do \n\n```suggestion\nfrom nova import utils as nova_utils\n```","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"175424b0c6cab7f2301f06e8a9032c7625c6cec1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from nova import service"},{"line_number":40,"context_line":"from nova import test"},{"line_number":41,"context_line":"from nova.tests.unit import utils"},{"line_number":42,"context_line":"from nova.utils import cooperative_yield"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"test_service_opts \u003d ["},{"line_number":45,"context_line":"    cfg.HostAddressOpt(\"test_service_listen\","}],"source_content_type":"text/x-python","patch_set":3,"id":"62a802b7_43989bd8","line":42,"in_reply_to":"09c2011e_2d9be54b","updated":"2025-04-23 13:32:33.000000000","message":"Done","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        uri \u003d \"http://127.0.0.1:%d/%s\" % (server.port, 10000 * \u0027x\u0027)"},{"line_number":398,"context_line":"        resp \u003d requests.get(uri, proxies\u003d{\"http\": \"\"})"},{"line_number":399,"context_line":"        cooperative_yield()"},{"line_number":400,"context_line":"        self.assertNotEqual(resp.status_code,"},{"line_number":401,"context_line":"                            requests.codes.REQUEST_URI_TOO_LARGE)"},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"f82e974e_6b9ec0aa","line":399,"updated":"2025-04-22 12:47:09.000000000","message":"Then here do\n```suggestion\n         nova_utils.cooperative_yield()\n```","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"175424b0c6cab7f2301f06e8a9032c7625c6cec1","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        uri \u003d \"http://127.0.0.1:%d/%s\" % (server.port, 10000 * \u0027x\u0027)"},{"line_number":398,"context_line":"        resp \u003d requests.get(uri, proxies\u003d{\"http\": \"\"})"},{"line_number":399,"context_line":"        cooperative_yield()"},{"line_number":400,"context_line":"        self.assertNotEqual(resp.status_code,"},{"line_number":401,"context_line":"                            requests.codes.REQUEST_URI_TOO_LARGE)"},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"6386f173_facf2feb","line":399,"in_reply_to":"f82e974e_6b9ec0aa","updated":"2025-04-23 13:32:33.000000000","message":"Done","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":65,"context_line":"from nova.compute import task_states"},{"line_number":66,"context_line":"from nova.compute import utils as compute_utils"},{"line_number":67,"context_line":"from nova.compute import vm_states"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"import nova.conf"},{"line_number":70,"context_line":"from nova import context"},{"line_number":71,"context_line":"from nova.db import constants as db_const"}],"source_content_type":"text/x-python","patch_set":2,"id":"e2f2fcf1_e4a200c8","line":68,"updated":"2025-04-22 07:55:07.000000000","message":"unnecessary change","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":65,"context_line":"from nova.compute import task_states"},{"line_number":66,"context_line":"from nova.compute import utils as compute_utils"},{"line_number":67,"context_line":"from nova.compute import vm_states"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"import nova.conf"},{"line_number":70,"context_line":"from nova import context"},{"line_number":71,"context_line":"from nova.db import constants as db_const"}],"source_content_type":"text/x-python","patch_set":2,"id":"648d3bd9_18eaeb27","line":68,"in_reply_to":"e2f2fcf1_e4a200c8","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":566,"context_line":"                                              \u0027name\u0027).cache,"},{"line_number":567,"context_line":"                _concurrency, \u0027fname\u0027, None,"},{"line_number":568,"context_line":"                signal\u003dsig1, wait\u003dwait1, done\u003ddone1)"},{"line_number":569,"context_line":"        time.sleep(0)"},{"line_number":570,"context_line":"        # Thread 1 should run before thread 2."},{"line_number":571,"context_line":"        sig1.wait()"},{"line_number":572,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"91f23903_d6c357b6","line":569,"updated":"2025-04-22 07:55:07.000000000","message":"this is a cooperative_yield so let\u0027s replace it with that call","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                                              \u0027name\u0027).cache,"},{"line_number":567,"context_line":"                _concurrency, \u0027fname\u0027, None,"},{"line_number":568,"context_line":"                signal\u003dsig1, wait\u003dwait1, done\u003ddone1)"},{"line_number":569,"context_line":"        time.sleep(0)"},{"line_number":570,"context_line":"        # Thread 1 should run before thread 2."},{"line_number":571,"context_line":"        sig1.wait()"},{"line_number":572,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"431c2f86_e6a24fb4","line":569,"in_reply_to":"91f23903_d6c357b6","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":14117,"context_line":""},{"line_number":14118,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \"migrate_start_postcopy\")"},{"line_number":14119,"context_line":"    @mock.patch.object(time, \"time\")"},{"line_number":14120,"context_line":"    @mock.patch.object(time, \"sleep\")"},{"line_number":14121,"context_line":"    @mock.patch.object(host.Host, \"get_connection\")"},{"line_number":14122,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \"get_job_info\")"},{"line_number":14123,"context_line":"    @mock.patch.object(objects.Instance, \"save\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9e74b6d5_1fce9493","line":14120,"updated":"2025-04-22 07:55:07.000000000","message":"So in the baseline each time.sleep() call caused an eventlet.sleep(0).\nNow it will case an immediate return. I\u0027m a bit afraid of removing the yielding form the test case. \nObviously we cannot keep time.sleep unpatched as that would slow down the test as the code we test uses time.sleep() with some timeout values.\nProbably the safest to do would be\n```\n    @mock.patch.object(time, \"sleep\", side_effect\u003dlamda x: utils.cooperative_yield(0))\n```","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":14117,"context_line":""},{"line_number":14118,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \"migrate_start_postcopy\")"},{"line_number":14119,"context_line":"    @mock.patch.object(time, \"time\")"},{"line_number":14120,"context_line":"    @mock.patch.object(time, \"sleep\")"},{"line_number":14121,"context_line":"    @mock.patch.object(host.Host, \"get_connection\")"},{"line_number":14122,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \"get_job_info\")"},{"line_number":14123,"context_line":"    @mock.patch.object(objects.Instance, \"save\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"a27da5d6_2aa2f140","line":14120,"in_reply_to":"9e74b6d5_1fce9493","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":15606,"context_line":"    def test_pre_live_migration_volume_backed_encrypted(self):"},{"line_number":15607,"context_line":"        self._test_pre_live_migration_volume_backed(encrypted_volumes\u003dTrue)"},{"line_number":15608,"context_line":""},{"line_number":15609,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027)"},{"line_number":15610,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027plug_vifs\u0027,"},{"line_number":15611,"context_line":"                       side_effect\u003dprocessutils.ProcessExecutionError)"},{"line_number":15612,"context_line":"    def test_pre_live_migration_plug_vifs_retry_fails(self, mock_plug,"}],"source_content_type":"text/x-python","patch_set":2,"id":"625a9b31_d1b3ab7d","line":15609,"updated":"2025-04-22 07:55:07.000000000","message":"ditto","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":15606,"context_line":"    def test_pre_live_migration_volume_backed_encrypted(self):"},{"line_number":15607,"context_line":"        self._test_pre_live_migration_volume_backed(encrypted_volumes\u003dTrue)"},{"line_number":15608,"context_line":""},{"line_number":15609,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027)"},{"line_number":15610,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027plug_vifs\u0027,"},{"line_number":15611,"context_line":"                       side_effect\u003dprocessutils.ProcessExecutionError)"},{"line_number":15612,"context_line":"    def test_pre_live_migration_plug_vifs_retry_fails(self, mock_plug,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1e0935b2_36e91cbe","line":15609,"in_reply_to":"625a9b31_d1b3ab7d","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":15633,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15634,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15635,"context_line":""},{"line_number":15636,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027)"},{"line_number":15637,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027plug_vifs\u0027)"},{"line_number":15638,"context_line":"    def test_pre_live_migration_plug_vifs_retry_works(self, mock_plug,"},{"line_number":15639,"context_line":"                                                      mock_sleep):"}],"source_content_type":"text/x-python","patch_set":2,"id":"6b9f9c69_2a196947","line":15636,"updated":"2025-04-22 07:55:07.000000000","message":"ditto","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":15633,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15634,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15635,"context_line":""},{"line_number":15636,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027)"},{"line_number":15637,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver, \u0027plug_vifs\u0027)"},{"line_number":15638,"context_line":"    def test_pre_live_migration_plug_vifs_retry_works(self, mock_plug,"},{"line_number":15639,"context_line":"                                                      mock_sleep):"}],"source_content_type":"text/x-python","patch_set":2,"id":"887ce7f3_031755f1","line":15636,"in_reply_to":"6b9f9c69_2a196947","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5571bfeeb3ba9751c88ac7f5e2a83f19a1880482","unresolved":true,"context_lines":[{"line_number":15666,"context_line":"        mock_plug.assert_has_calls([mock.call(instance, [])] * 3)"},{"line_number":15667,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15668,"context_line":"        # Called 2 times because the third \u0027plug_vifs\u0027 call is successful."},{"line_number":15669,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15670,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15671,"context_line":""},{"line_number":15672,"context_line":"    def test_pre_live_migration_plug_vifs_with_dest_port_bindings(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ed16881_a54ca653","line":15669,"updated":"2025-04-24 10:04:21.000000000","message":"Expected: [call(1), call(1)]\nActual: [call(1), call(0.05), call(0.05), call(1), call(0.05), call(0.05)]\n\nSo we have the two call to sleep(1) but as we mocking time.sleep probably now see other calls using time.sleep in the call path. I don\u0027t see any time.sleep(0.05) calls in nova.","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8877ddc628de52144c17302114aad021ac79c896","unresolved":true,"context_lines":[{"line_number":15666,"context_line":"        mock_plug.assert_has_calls([mock.call(instance, [])] * 3)"},{"line_number":15667,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15668,"context_line":"        # Called 2 times because the third \u0027plug_vifs\u0027 call is successful."},{"line_number":15669,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15670,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15671,"context_line":""},{"line_number":15672,"context_line":"    def test_pre_live_migration_plug_vifs_with_dest_port_bindings(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"a0fc7164_ba7b19de","line":15669,"in_reply_to":"733f723a_52369739","updated":"2025-04-24 10:09:26.000000000","message":"Lets see what https://review.opendev.org/c/openstack/nova/+/948057 shows. But I leaning towards adjusting the assert in the test to check only that there are least two sleep(1) calls, and ignore the other sleep calls.","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d59f107dd62efd07f66f42bb91e2f76714ff2af1","unresolved":true,"context_lines":[{"line_number":15666,"context_line":"        mock_plug.assert_has_calls([mock.call(instance, [])] * 3)"},{"line_number":15667,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15668,"context_line":"        # Called 2 times because the third \u0027plug_vifs\u0027 call is successful."},{"line_number":15669,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15670,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15671,"context_line":""},{"line_number":15672,"context_line":"    def test_pre_live_migration_plug_vifs_with_dest_port_bindings(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"733f723a_52369739","line":15669,"in_reply_to":"9ed16881_a54ca653","updated":"2025-04-24 10:07:16.000000000","message":"Strangely I cannot reproduce the issue locally but all the gate unit test run reproduced it.","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9105e97a7c2e77b0076510e445ba04dff278a717","unresolved":true,"context_lines":[{"line_number":15666,"context_line":"        mock_plug.assert_has_calls([mock.call(instance, [])] * 3)"},{"line_number":15667,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15668,"context_line":"        # Called 2 times because the third \u0027plug_vifs\u0027 call is successful."},{"line_number":15669,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15670,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15671,"context_line":""},{"line_number":15672,"context_line":"    def test_pre_live_migration_plug_vifs_with_dest_port_bindings(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e0fb289f_9df210b9","line":15669,"in_reply_to":"a0fc7164_ba7b19de","updated":"2025-04-24 10:53:41.000000000","message":"same. the other might be related ot the hetatbeat that os_vif has via the ovsdbapp or some other issue like that. its feels unrelated to the test so only assertign the two calls we expect are there is ok i think\n\nthe other approch is to add a sleep function to nova utils so that we can mock that instead of time.sleep and then we can make sure we are only asserting our own sleeps in tests liek this","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f28297310a7c238e01f1198388a9592915b5485b","unresolved":true,"context_lines":[{"line_number":15666,"context_line":"        mock_plug.assert_has_calls([mock.call(instance, [])] * 3)"},{"line_number":15667,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15668,"context_line":"        # Called 2 times because the third \u0027plug_vifs\u0027 call is successful."},{"line_number":15669,"context_line":"        mock_sleep.assert_has_calls([mock.call(1)] * 2)"},{"line_number":15670,"context_line":"        self.assertEqual(2, mock_sleep.call_count)"},{"line_number":15671,"context_line":""},{"line_number":15672,"context_line":"    def test_pre_live_migration_plug_vifs_with_dest_port_bindings(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bbdfe7a4_e7b022cb","line":15669,"in_reply_to":"e0fb289f_9df210b9","updated":"2025-04-24 11:48:41.000000000","message":"It is actually the fake rabbit impl:\n\n  File \"/home/zuul/src/opendev.org/openstack/nova/.tox/py312/lib/python3.12/site-packages/oslo_messaging/_drivers/impl_fake.py\", line 83, in poll\n  \nshown by\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_56a/openstack/56aceabc37854c6da46134ea739fbfae/testr_results.html\n\nBut is does not change the fact that we just need to ignore it.","commit_id":"fd8ef6fecfcdf4d77aaa54f93acfd28940e46a03"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f28297310a7c238e01f1198388a9592915b5485b","unresolved":true,"context_lines":[{"line_number":15639,"context_line":"        self.assertEqual(3, mock_plug.call_count)"},{"line_number":15640,"context_line":"        # Called \u0027live_migration_retry_count - 1\u0027 times"},{"line_number":15641,"context_line":"        calls_with_1 \u003d [call for call in mock_sleep.call_args_list if call \u003d\u003d mock.call(1)]"},{"line_number":15642,"context_line":"        #Assert there are exactly two such calls"},{"line_number":15643,"context_line":"        assert len(calls_with_1) \u003d\u003d 2"},{"line_number":15644,"context_line":""},{"line_number":15645,"context_line":"    @mock.patch.object(time, \"sleep\","}],"source_content_type":"text/x-python","patch_set":5,"id":"911aae3a_1f7432f3","line":15642,"updated":"2025-04-24 11:48:41.000000000","message":"pep8 is sad :)\n* split the line at 79 chars\n* have a space between # and the comment","commit_id":"4aa0409d8bd395279a4c0252f1540b001a1591bd"}],"nova/tests/unit/virt/libvirt/test_host.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":35,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":36,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":37,"context_line":"from nova.tests.fixtures import libvirt_data as fake_libvirt_data"},{"line_number":38,"context_line":"from nova.utils import cooperative_yield"},{"line_number":39,"context_line":"from nova.virt import event"},{"line_number":40,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":41,"context_line":"from nova.virt.libvirt import event as libvirtevent"}],"source_content_type":"text/x-python","patch_set":3,"id":"4599336a_94934322","line":38,"updated":"2025-04-22 12:47:09.000000000","message":"same","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"175424b0c6cab7f2301f06e8a9032c7625c6cec1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from nova.tests import fixtures as nova_fixtures"},{"line_number":36,"context_line":"from nova.tests.fixtures import libvirt as fakelibvirt"},{"line_number":37,"context_line":"from nova.tests.fixtures import libvirt_data as fake_libvirt_data"},{"line_number":38,"context_line":"from nova.utils import cooperative_yield"},{"line_number":39,"context_line":"from nova.virt import event"},{"line_number":40,"context_line":"from nova.virt.libvirt import config as vconfig"},{"line_number":41,"context_line":"from nova.virt.libvirt import event as libvirtevent"}],"source_content_type":"text/x-python","patch_set":3,"id":"93e8544e_8c784e7b","line":38,"in_reply_to":"4599336a_94934322","updated":"2025-04-23 13:32:33.000000000","message":"Done","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"}],"nova/utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def cooperative_yield(sleep: int):"},{"line_number":87,"context_line":"    time.sleep(sleep)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def _get_default_green_pool():"}],"source_content_type":"text/x-python","patch_set":2,"id":"e428a3f1_6446a8bd","line":87,"updated":"2025-04-22 07:55:07.000000000","message":"Thanks!\n\nLets add a TODO here that we want to make this noop in threading mode once we have a service that can run in threading mode. And we plan to remove all the cooperative_yield calls once we remove the eventlet support.\n\nAlso I feel that if this is ever called with sleep \u003e 0 then that call site\n* a) needs cooperative yield, but then a 0 length sleep is enough OR\n* b) needs to sleep for a while to implement a retry loop and then such sleep needs to be kept in threading mode as well and therefore the call site should use time.sleep(x) explicitly.\n\nSo I suggest to drop the `sleep` param and always do time.sleep(0) here.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def cooperative_yield(sleep: int):"},{"line_number":87,"context_line":"    time.sleep(sleep)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def _get_default_green_pool():"}],"source_content_type":"text/x-python","patch_set":2,"id":"6755343a_5f9904c1","line":87,"in_reply_to":"e428a3f1_6446a8bd","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":4113,"context_line":"                    LOG.info(\"Instance may have been rebooted during soft \""},{"line_number":4114,"context_line":"                             \"reboot, so return now.\", instance\u003dinstance)"},{"line_number":4115,"context_line":"                    return True"},{"line_number":4116,"context_line":"            utils.cooperative_yield(1)"},{"line_number":4117,"context_line":"        return False"},{"line_number":4118,"context_line":""},{"line_number":4119,"context_line":"    def _hard_reboot(self, context, instance, network_info, share_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3e72bfa1_f085a226","line":4116,"updated":"2025-04-22 07:55:07.000000000","message":"this is not just a cooperative_yield, its main purpose of sleep here is to implement CONF.libvirt.wait_soft_reboot_seconds. So the time.sleep should remain here in threading mode too.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":4113,"context_line":"                    LOG.info(\"Instance may have been rebooted during soft \""},{"line_number":4114,"context_line":"                             \"reboot, so return now.\", instance\u003dinstance)"},{"line_number":4115,"context_line":"                    return True"},{"line_number":4116,"context_line":"            utils.cooperative_yield(1)"},{"line_number":4117,"context_line":"        return False"},{"line_number":4118,"context_line":""},{"line_number":4119,"context_line":"    def _hard_reboot(self, context, instance, network_info, share_info,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a221409e_f8162589","line":4116,"in_reply_to":"3e72bfa1_f085a226","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":11515,"context_line":"                                \u0027%(max_retry)d.\u0027,"},{"line_number":11516,"context_line":"                                {\u0027cnt\u0027: cnt, \u0027max_retry\u0027: max_retry},"},{"line_number":11517,"context_line":"                                instance\u003dinstance)"},{"line_number":11518,"context_line":"                    utils.cooperative_yield(1)"},{"line_number":11519,"context_line":""},{"line_number":11520,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":11521,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f1eb2a9_57b76f3d","line":11518,"updated":"2025-04-22 07:55:07.000000000","message":"This also feels like not just a yield but an actual sleep needed to make iptables happy during the retry loop. So I think we need the explicit time.sleep(1) here even in threading mode.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":11515,"context_line":"                                \u0027%(max_retry)d.\u0027,"},{"line_number":11516,"context_line":"                                {\u0027cnt\u0027: cnt, \u0027max_retry\u0027: max_retry},"},{"line_number":11517,"context_line":"                                instance\u003dinstance)"},{"line_number":11518,"context_line":"                    utils.cooperative_yield(1)"},{"line_number":11519,"context_line":""},{"line_number":11520,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":11521,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"52072997_56cbbf48","line":11518,"in_reply_to":"5f1eb2a9_57b76f3d","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6212cb9c94b7f763d299483f594cdbe77d313d22","unresolved":true,"context_lines":[{"line_number":11831,"context_line":"            # Only use announce_pause after the first attempt to avoid"},{"line_number":11832,"context_line":"            # pausing before calling announce_self for the first attempt"},{"line_number":11833,"context_line":"            if current_attempt !\u003d 1:"},{"line_number":11834,"context_line":"                utils.cooperative_yield(announce_pause)"},{"line_number":11835,"context_line":""},{"line_number":11836,"context_line":"            LOG.info(\u0027Sending announce-self command to QEMU monitor. \u0027"},{"line_number":11837,"context_line":"                     \u0027Attempt %(current_attempt)s of %(max_attempts)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"c92a7159_060e80a7","line":11834,"updated":"2025-04-22 07:55:07.000000000","message":"this is also an explicit sleep so lets have a time.sleep(announce_pause) here, otherwise the existing retry logic will be broken in threading mode looping without waiting.","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11082,"name":"Kamil Sambor","email":"ksambor@redhat.com","username":"ksambor"},"change_message_id":"634491cb4ae2b0aa145f09fe14daffa576491b64","unresolved":false,"context_lines":[{"line_number":11831,"context_line":"            # Only use announce_pause after the first attempt to avoid"},{"line_number":11832,"context_line":"            # pausing before calling announce_self for the first attempt"},{"line_number":11833,"context_line":"            if current_attempt !\u003d 1:"},{"line_number":11834,"context_line":"                utils.cooperative_yield(announce_pause)"},{"line_number":11835,"context_line":""},{"line_number":11836,"context_line":"            LOG.info(\u0027Sending announce-self command to QEMU monitor. \u0027"},{"line_number":11837,"context_line":"                     \u0027Attempt %(current_attempt)s of %(max_attempts)s\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf43fe23_8e09a43f","line":11834,"in_reply_to":"c92a7159_060e80a7","updated":"2025-04-22 10:07:32.000000000","message":"Done","commit_id":"01154f34de915c1a3f142706b9300fd9e76acbc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":4113,"context_line":"                    LOG.info(\"Instance may have been rebooted during soft \""},{"line_number":4114,"context_line":"                             \"reboot, so return now.\", instance\u003dinstance)"},{"line_number":4115,"context_line":"                    return True"},{"line_number":4116,"context_line":"            time.sleep(1)"},{"line_number":4117,"context_line":"        return False"},{"line_number":4118,"context_line":""},{"line_number":4119,"context_line":"    def _hard_reboot(self, context, instance, network_info, share_info,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c13f518e_fae6a58d","line":4116,"updated":"2025-04-22 12:47:09.000000000","message":"again this is a real timed sleep so this is correct.","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":true,"context_lines":[{"line_number":11515,"context_line":"                                \u0027%(max_retry)d.\u0027,"},{"line_number":11516,"context_line":"                                {\u0027cnt\u0027: cnt, \u0027max_retry\u0027: max_retry},"},{"line_number":11517,"context_line":"                                instance\u003dinstance)"},{"line_number":11518,"context_line":"                    time.sleep(1)"},{"line_number":11519,"context_line":""},{"line_number":11520,"context_line":"    def pre_live_migration(self, context, instance, block_device_info,"},{"line_number":11521,"context_line":"                           network_info, disk_info, migrate_data):"}],"source_content_type":"text/x-python","patch_set":3,"id":"421c0ab0_33fcd395","line":11518,"updated":"2025-04-22 12:47:09.000000000","message":"as is this because we want to allow tiem for iptable\nwith that said we dont actully make those iptabel calsl anymore however three still other kernel calls that we want to allow to complete so while the specific external system we wait on has changed over time teh centimet of the comment on lin 11502 is still correct","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"264acc202527218258ed3d931c2784b8fa1058b1","unresolved":false,"context_lines":[{"line_number":11831,"context_line":"            # Only use announce_pause after the first attempt to avoid"},{"line_number":11832,"context_line":"            # pausing before calling announce_self for the first attempt"},{"line_number":11833,"context_line":"            if current_attempt !\u003d 1:"},{"line_number":11834,"context_line":"                time.sleep(announce_pause)"},{"line_number":11835,"context_line":""},{"line_number":11836,"context_line":"            LOG.info(\u0027Sending announce-self command to QEMU monitor. \u0027"},{"line_number":11837,"context_line":"                     \u0027Attempt %(current_attempt)s of %(max_attempts)s\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e9374993_cc55cdf9","line":11834,"updated":"2025-04-22 12:47:09.000000000","message":"ack again this is a vaild timed sleep","commit_id":"74127f1c5328aae9b96faee745fb2f81fe857ede"}]}
