)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"00d69e238d5bf85d8e578dab7c89c97700f6fbc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ed79ac0b_7772d722","updated":"2026-06-24 12:27:31.000000000","message":"Looks good.\n\nTest timing from watcher-tempest-aetos from this patch\n\n2026-06-22 21:11:57.594252 | controller | \u003d\u003d\u003d\u003d\u003d\u003d\n2026-06-22 21:11:57.594351 | controller | Totals\n2026-06-22 21:11:57.594372 | controller | \u003d\u003d\u003d\u003d\u003d\u003d\n2026-06-22 21:11:57.594391 | controller | Ran: 103 tests in 4036.5563 sec.\n2026-06-22 21:11:57.595732 | controller |  - Passed: 101\n2026-06-22 21:11:57.595778 | controller |  - Skipped: 2\n2026-06-22 21:11:57.595800 | controller |  - Expected Fail: 0\n2026-06-22 21:11:57.595819 | controller |  - Unexpected Success: 0\n2026-06-22 21:11:57.595838 | controller |  - Failed: 0\n2026-06-22 21:11:57.595857 | controller | Sum of execute time for each test: 3535.6168 sec.\n\nand timing from other patch like https://review.opendev.org/c/openstack/watcher-tempest-plugin/+/994246 for the same job\n\n2026-06-22 10:02:52.079575 | controller | \u003d\u003d\u003d\u003d\u003d\u003d\n2026-06-22 10:02:52.079692 | controller | Totals\n2026-06-22 10:02:52.079696 | controller | \u003d\u003d\u003d\u003d\u003d\u003d\n2026-06-22 10:02:52.079699 | controller | Ran: 103 tests in 2681.5359 sec.\n2026-06-22 10:02:52.079729 | controller |  - Passed: 101\n2026-06-22 10:02:52.079747 | controller |  - Skipped: 2\n2026-06-22 10:02:52.079751 | controller |  - Expected Fail: 0\n2026-06-22 10:02:52.079754 | controller |  - Unexpected Success: 0\n2026-06-22 10:02:52.079758 | controller |  - Failed: 0\n\nsince timing for resource_check_interval and resource_timeout are different, that might have caused the test timing increase,","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9cd549468d34b1f7c14c0ea0bec90df81a875ab8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c5cdd68a_da7b8be4","updated":"2026-06-23 09:09:50.000000000","message":"This helps to reduce execution time for tempest tests. I\u0027m afraid will not be a big drop, but makes sense and any optimization is appreciated","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"cbbb41d0b48a3fc93ef236d6a4fde178e8e60f8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"31f24589_317d34cd","updated":"2026-06-23 06:54:50.000000000","message":"check experimental","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"38d50f301854a4f80dd6f0608b138e98f8c3a5b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7e8fdbce_60f248b1","updated":"2026-06-23 06:50:06.000000000","message":"check-experimental","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"71f9c26c6a21e7b0839a02a341443ed0a6b548d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7840cb8f_4dc48514","updated":"2026-06-24 12:34:11.000000000","message":"im good with this as is","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"69aeecbe0114621dc5eb14aebf4d200e55cd7974","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"30d4a26a_9d11baac","updated":"2026-06-25 13:33:31.000000000","message":"recheck","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f9fa939f73f70cd49ced593881eb4bd15daf3c07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"574a4e15_d1247b01","updated":"2026-06-24 16:13:46.000000000","message":"recheck","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"db79fdbdcbff34e2d86b7309fb8e0016cd8c72d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6eb78f46_bc083585","updated":"2026-06-24 21:46:32.000000000","message":"recheck","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"9d2d65fd613778d81756e123a78ba373a95da904","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4c1af1e3_5cb5f167","in_reply_to":"ed79ac0b_7772d722","updated":"2026-06-24 12:34:02.000000000","message":"In this patch job https://27fbadc9cf2dd544239f-7d0e556db3075d25d1b91bbdcc8a4562.ssl.cf1.rackcdn.com/openstack/cc5721b1f73d474aa49a426141f2f47b/job-output.txt\n\n2026-06-22 19:15:26.282338 | LOOP [emit-job-header : Print node information]\n2026-06-22 19:15:26.530964 | localhost | ok:\n2026-06-22 19:15:26.531435 | localhost | # Node Information\n2026-06-22 19:15:26.531516 | localhost | Inventory Hostname: compute1\n2026-06-22 19:15:26.531580 | localhost | Hostname: npf0c35a80b9074\n2026-06-22 19:15:26.531639 | localhost | Username: zuul\n2026-06-22 19:15:26.531701 | localhost | Distro: Ubuntu 24.04\n2026-06-22 19:15:26.531760 | localhost | Provider: opendev.org%2Fopendev%2Fzuul-providers/rax-dfw-main\n2026-06-22 19:15:26.531855 | localhost | Region: DFW\n2026-06-22 19:15:26.531914 | localhost | Label: ubuntu-noble\n2026-06-22 19:15:26.531970 | localhost | Product Name: HVM domU\n2026-06-22 19:15:26.532027 | localhost | Interface IP: 104.239.142.36\n2026-06-22 19:15:26.632626 | localhost | ok:\n2026-06-22 19:15:26.632816 | localhost | # Node Information\n2026-06-22 19:15:26.632887 | localhost | Inventory Hostname: controller\n2026-06-22 19:15:26.632959 | localhost | Hostname: np9623dad3919d4\n2026-06-22 19:15:26.633055 | localhost | Username: zuul\n2026-06-22 19:15:26.633118 | localhost | Distro: Ubuntu 24.04\n2026-06-22 19:15:26.633175 | localhost | Provider: opendev.org%2Fopendev%2Fzuul-providers/rax-dfw-main\n2026-06-22 19:15:26.633232 | localhost | Region: DFW\n2026-06-22 19:15:26.633289 | localhost | Label: ubuntu-noble\n2026-06-22 19:15:26.633346 | localhost | Product Name: HVM domU\n2026-06-22 19:15:26.633402 | localhost | Interface IP: 104.130.127.152\n\nand\nhttps://review.opendev.org/c/openstack/watcher-tempest-plugin/+/994246 job https://ba3a331ce6192a08ca19-83635154d4e9ad424ed62c3282739e98.ssl.cf5.rackcdn.com/openstack/7eb0ba9839cc489ca9215647a5f3ac6b/job-output.txt\n\n2026-06-22 08:56:49.365694 | LOOP [emit-job-header : Print node information]\n2026-06-22 08:56:49.583044 | localhost | ok:\n2026-06-22 08:56:49.583569 | localhost | # Node Information\n2026-06-22 08:56:49.583648 | localhost | Inventory Hostname: compute1\n2026-06-22 08:56:49.583744 | localhost | Hostname: np6e066f88ea154\n2026-06-22 08:56:49.583812 | localhost | Username: zuul\n2026-06-22 08:56:49.583874 | localhost | Distro: Ubuntu 24.04\n2026-06-22 08:56:49.583933 | localhost | Provider: opendev.org%2Fopendev%2Fzuul-providers/raxflex-dfw3-main\n2026-06-22 08:56:49.583991 | localhost | Region: DFW3\n2026-06-22 08:56:49.584048 | localhost | Label: ubuntu-noble\n2026-06-22 08:56:49.584105 | localhost | Product Name: OpenStack Nova\n2026-06-22 08:56:49.584162 | localhost | Interface IP: 50.56.158.88\n2026-06-22 08:56:49.664353 | localhost | ok:\n2026-06-22 08:56:49.664581 | localhost | # Node Information\n2026-06-22 08:56:49.664654 | localhost | Inventory Hostname: controller\n2026-06-22 08:56:49.664742 | localhost | Hostname: np8ef1ff8cf7a64\n2026-06-22 08:56:49.664807 | localhost | Username: zuul\n2026-06-22 08:56:49.664865 | localhost | Distro: Ubuntu 24.04\n2026-06-22 08:56:49.664922 | localhost | Provider: opendev.org%2Fopendev%2Fzuul-providers/raxflex-dfw3-main\n2026-06-22 08:56:49.664979 | localhost | Region: DFW3\n2026-06-22 08:56:49.665035 | localhost | Label: ubuntu-noble\n2026-06-22 08:56:49.665093 | localhost | Product Name: OpenStack Nova\n2026-06-22 08:56:49.665149 | localhost | Interface IP: 50.56.159.219\n\nIt will help to compare the results based on different providers.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"3af7918fd9d297e969ad36c6d95d2963982b3f8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c1a3f706_84bb3e64","in_reply_to":"ed79ac0b_7772d722","updated":"2026-06-24 12:37:28.000000000","message":"We need to compare between providers. The first one that you mentioned run in raxflex provider, which is faster indeed. The second one run in rax. Older rax and ovh are facing timeouts. This patch reduces a bit the time to complete all tests. But doesn\u0027t fix all the problems","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}],"watcher_tempest_plugin/config.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        help\u003d\"In real-data test cases, the period of time during which \""},{"line_number":123,"context_line":"             \"the load will be executed in seconds.\""},{"line_number":124,"context_line":"    ),"},{"line_number":125,"context_line":"    cfg.FloatOpt("},{"line_number":126,"context_line":"        \"model_check_interval\","},{"line_number":127,"context_line":"        default\u003d1.0,"},{"line_number":128,"context_line":"        help\u003d\"Interval in seconds between polls when waiting for the \""}],"source_content_type":"text/x-python","patch_set":2,"id":"03759686_8d374b66","line":125,"updated":"2026-06-24 21:58:08.000000000","message":"The Assisted-By tag in the commit message uses \u0027Claude Code (Sonnet 4.6)\u0027 which is a non-standard format. The style guide suggests \u0027Assisted-By: claude-code\u0027 as the tag format.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Consistent AI attribution tags across OpenStack projects make it easier to track AI-assisted contributions and comply with the OpenStack AI policy.\n\n**Recommendation**:\nUse the standardized format \u0027Assisted-By: claude-code\u0027 in future commits. This is minor and does not block merge.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        help\u003d\"In real-data test cases, the period of time during which \""},{"line_number":123,"context_line":"             \"the load will be executed in seconds.\""},{"line_number":124,"context_line":"    ),"},{"line_number":125,"context_line":"    cfg.FloatOpt("},{"line_number":126,"context_line":"        \"model_check_interval\","},{"line_number":127,"context_line":"        default\u003d1.0,"},{"line_number":128,"context_line":"        help\u003d\"Interval in seconds between polls when waiting for the \""}],"source_content_type":"text/x-python","patch_set":2,"id":"29440fb4_de5e17f1","line":125,"updated":"2026-06-24 21:58:08.000000000","message":"The four new config options lack guidance on reasonable tuning ranges in their help strings. Operators setting these values have no indication of safe minimums or maximums.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Operators configuring these values would have guidance on reasonable ranges and know these are tunable test parameters rather than service configuration.\n\n**Recommendation**:\nAdd notes to the help strings about expected ranges. For example, note that setting resource_check_interval too low will increase API load, and resource_timeout should be at least as long as the slowest expected operation.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c309114383e74d31157e886646ab374d13b5249f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"             \"resources (audits, action plans, compute nodes) to reach \""},{"line_number":137,"context_line":"             \"an expected state.\""},{"line_number":138,"context_line":"    ),"},{"line_number":139,"context_line":"    cfg.IntOpt("},{"line_number":140,"context_line":"        \"resource_timeout\","},{"line_number":141,"context_line":"        default\u003d300,"},{"line_number":142,"context_line":"        help\u003d\"Maximum time in seconds to wait for Watcher resources \""}],"source_content_type":"text/x-python","patch_set":2,"id":"b42b133f_80ef4a9a","line":139,"updated":"2026-06-22 19:20:38.000000000","message":"resource_timeout is an IntOpt while resource_check_interval is a FloatOpt; the division at line 372 yields a float that math.ceil absorbs, but the type asymmetry is unnecessary and resource_timeout as a duration could reasonably be fractional too.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Consistent FloatOpt typing for all duration/interval options avoids surprising integer truncation elsewhere the value is reused and matches the model_check_interval/resource_check_interval precedent.\n\n**Recommendation**:\nConsider making resource_timeout and model_timeout FloatOpt for symmetry with the interval options, or document why the timeout must be integer-valued.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}],"watcher_tempest_plugin/tests/api/admin/test_audit.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d5da15abfaa2bffc7fa56bad28e3394060b3d55a","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        _, body \u003d self.create_audit(**audit_params)"},{"line_number":151,"context_line":"        audit_uuid \u003d body[\u0027uuid\u0027]"},{"line_number":152,"context_line":"        test_utils.call_until_true("},{"line_number":153,"context_line":"            func\u003dfunctools.partial("},{"line_number":154,"context_line":"                self.is_audit_ongoing, audit_uuid),"},{"line_number":155,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"}],"source_content_type":"text/x-python","patch_set":1,"id":"521132a7_da796f6f","line":152,"updated":"2026-06-22 16:05:41.000000000","message":"Best-effort wait sites in test_audit.py (test_update_audit, test_delete_audit) previously used short durations (5s, 10s) for transient conditions, now use resource_timeout (300s default). Return value is discarded (no assert), so tests wait the full 300s if the condition is never met.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Best-effort waits for transient states (audit ONGOING, audit IDLE, audit deleted) now block up to 300s if the state transition is missed, significantly slowing test execution. The previous 5-10s durations were intentional for quick verification of fast transitions.\n\n**Suggestion**:\nFor transient-state waits where missing the window is acceptable, keep a short explicit duration rather than the general resource_timeout. Consider a short-duration config option or pass an explicit small duration for positive-condition checks on fast transitions.","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        _, body \u003d self.create_audit(**audit_params)"},{"line_number":151,"context_line":"        audit_uuid \u003d body[\u0027uuid\u0027]"},{"line_number":152,"context_line":"        test_utils.call_until_true("},{"line_number":153,"context_line":"            func\u003dfunctools.partial("},{"line_number":154,"context_line":"                self.is_audit_ongoing, audit_uuid),"},{"line_number":155,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"}],"source_content_type":"text/x-python","patch_set":2,"id":"eadbc232_2e2998a7","line":152,"updated":"2026-06-24 21:58:08.000000000","message":"Polling intervals for previously fast-checking call sites increased significantly. The test_audit.py is_audit_ongoing and is_audit_idle checks used sleep_for\u003d0.5 (500ms); now they use resource_check_interval defaulting to 1.0s, doubling poll latency.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: These were intentionally short-interval polls for near-immediate state transitions (audit ongoing/idle). Doubling the interval from 0.5s to 1.0s adds unnecessary latency. Conversely, the duration was raised from 10s to 300s, so these are no longer quick-fail checks.\n\n**Suggestion**:\nConsider whether a uniform resource_check_interval is appropriate for these fast state-transition checks, or whether the original short intervals should be preserved for specific call sites that expect rapid transitions.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d8b2781d362f7b011fdb9ec226280813f0c8a685","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        _, body \u003d self.create_audit(**audit_params)"},{"line_number":151,"context_line":"        audit_uuid \u003d body[\u0027uuid\u0027]"},{"line_number":152,"context_line":"        test_utils.call_until_true("},{"line_number":153,"context_line":"            func\u003dfunctools.partial("},{"line_number":154,"context_line":"                self.is_audit_ongoing, audit_uuid),"},{"line_number":155,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2cd8af1a_f56dd98c","line":152,"updated":"2026-06-25 15:19:38.000000000","message":"Short state-transition waits (5s/10s) for is_audit_ongoing, is_audit_idle, and is_audit_deleted now use resource_timeout (300s default). In test_update_audit the wait result is not asserted, so a failing audit blocks 300s before cancel, versus the original 10s fail-fast.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Worst-case test wall-clock time increases from ~10s to ~300s for negative or slow-transition paths. CI failures on these tests become significantly slower, and the 1.0s default poll interval (was 0.5s) doubles the responsiveness lag for these quick checks.\n\n**Suggestion**:\nConsider a dedicated short-transition config option (e.g. audit_state_check_timeout) for waits that assert a quick expected state transition, or at minimum assert the call_until_true result so the test fails fast instead of silently proceeding after a 300s timeout.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c309114383e74d31157e886646ab374d13b5249f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        test_utils.call_until_true("},{"line_number":153,"context_line":"            func\u003dfunctools.partial("},{"line_number":154,"context_line":"                self.is_audit_ongoing, audit_uuid),"},{"line_number":155,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"},{"line_number":156,"context_line":"            sleep_for\u003dCONF.optimize.resource_check_interval"},{"line_number":157,"context_line":"        )"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9817b972_c84954c4","line":155,"updated":"2026-06-22 19:20:38.000000000","message":"Several API tests previously used short durations deliberately scoped to the operation: is_audit_ongoing duration\u003d10, is_audit_idle duration\u003d10, is_audit_deleted duration\u003d5. All are now resource_timeout\u003d300, a 30-60x increase in the failure-path wall time of those tests.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: On a regression where the condition never becomes true, these smoke-tagged tests will now burn up to 300s each (vs 5-10s) before the subsequent assertion fires, noticeably slowing the gate and delaying failure signal.\n\n**Suggestion**:\nKeep the operation-specific short durations as inline literals or add a finer-grained option (e.g. quick_state_timeout) for these fast-state checks. If a single value is desired, a default smaller than 300 (e.g. 60) better balances the API-test cases.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}],"watcher_tempest_plugin/tests/client_functional/v1/test_action.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d3ca243dd6d19890227b2c011b6390dd0518ef95","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        cls.audit_uuid \u003d audit_output[\u0027UUID\u0027]"},{"line_number":47,"context_line":"        audit_created \u003d test_utils.call_until_true("},{"line_number":48,"context_line":"            func\u003dfunctools.partial(cls.has_audit_created, cls.audit_uuid),"},{"line_number":49,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"},{"line_number":50,"context_line":"            sleep_for\u003dCONF.optimize.resource_check_interval)"},{"line_number":51,"context_line":"        if not audit_created:"},{"line_number":52,"context_line":"            raise Exception(\u0027Audit has not been succeeded\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"29ab8022_c64d6cdc","line":49,"updated":"2026-06-24 16:31:28.000000000","message":"Client functional test timeouts halved from 600s to 300s. All client_functional tests previously used duration\u003d600 but now use resource_timeout (default 300). These tests invoke the watcher CLI subprocess which is slower than direct API calls, risking intermittent failures in slow CI environments.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Client functional tests may time out prematurely, causing intermittent CI failures that are hard to reproduce and debug.\n\n**Priority**: Before merge\n**Why This Matters**: Client functional tests use CLI subprocess calls which have higher latency than API calls. Reducing their timeout from 600s to 300s with a single global default could cause flakes in busy CI environments where audits take longer to complete.\n\n**Recommendation**:\nEither set resource_timeout default to 600 to preserve existing behavior, or introduce a separate longer timeout for client functional tests. At minimum, document in the commit message that these timeouts were intentionally halved.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}],"watcher_tempest_plugin/tests/client_functional/v1/test_audit.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        audit_raw_output \u003d cls.watcher("},{"line_number":48,"context_line":"            \u0027audit create -a %s\u0027 % template_output[\u0027Name\u0027])"},{"line_number":49,"context_line":"        audit_output \u003d cls.parse_show_as_object(audit_raw_output)"},{"line_number":50,"context_line":"        cls.audit_uuid \u003d audit_output[\u0027UUID\u0027]"},{"line_number":51,"context_line":"        audit_created \u003d test_utils.call_until_true("},{"line_number":52,"context_line":"            func\u003dfunctools.partial(cls.has_audit_created, cls.audit_uuid),"},{"line_number":53,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa11b76a_caca6a32","line":50,"updated":"2026-06-24 21:58:08.000000000","message":"Client-functional tests previously used duration\u003d600 with sleep_for\u003d2 for audit creation waits. These are now resource_timeout\u003d300 with resource_check_interval\u003d1.0, reducing both the timeout by half and the poll interval by half.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: In environments where audit creation takes more than 5 minutes, these functional tests will now fail. The original 600s timeout existed for a reason. The 1s poll interval (down from 2s) also increases API call frequency.\n\n**Suggestion**:\nVerify that 300s is sufficient for audit creation in all supported deployment types. If functional tests run against real deployments where audit creation is slow, the default may need to be higher.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}],"watcher_tempest_plugin/tests/scenario/base.py":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d5da15abfaa2bffc7fa56bad28e3394060b3d55a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                LOG.exception(exc)"},{"line_number":224,"context_line":"                return False"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        assert test_utils.call_until_true("},{"line_number":227,"context_line":"            func\u003d_are_compute_nodes_setup,"},{"line_number":228,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"},{"line_number":229,"context_line":"            sleep_for\u003dCONF.optimize.resource_check_interval"}],"source_content_type":"text/x-python","patch_set":1,"id":"d489afa8_51ed775f","line":226,"updated":"2026-06-22 16:05:41.000000000","message":"Call sites previously had duration\u003d600 (10 min) now use resource_timeout default 300 (5 min), halving max wait. Affected: scenario/base.py compute node setup, gnocchi measures, action plan/audit waits; client_functional audit creation; test_continuous_audit.py.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Tests that could take up to 600s for slow operations (compute node setup, gnocchi measures, action plan execution) now time out at 300s, which may cause intermittent failures in heavily loaded or slow CI environments where operations legitimately take longer.\n\n**Priority**: Before merge\n**Why This Matters**: The commit states default behavior should match previous values, but duration\u003d600 call sites are now capped at 300s. This is a behavioral regression risk. Operators relying on the implicit 600s ceiling will see new timeout failures unless they override resource_timeout.\n\n**Recommendation**:\nEither set resource_timeout default to 600 to preserve the longest previous duration, or introduce separate timeout options for genuinely slow operations (compute node setup, gnocchi measures) vs fast resource state checks. At minimum, document that the default max-wait for previously-600s call sites is reduced to 300s.","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"bd9ef1b06b153bfd925931a66430e5bfb82dca14","unresolved":true,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003d30):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":255,"context_line":"            if condition():"}],"source_content_type":"text/x-python","patch_set":1,"id":"b55814ac_c26009ef","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":44},"updated":"2026-06-22 15:48:19.000000000","message":"Missed this","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d5da15abfaa2bffc7fa56bad28e3394060b3d55a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003d30):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":255,"context_line":"            if condition():"}],"source_content_type":"text/x-python","patch_set":1,"id":"69033778_988babc4","line":252,"updated":"2026-06-22 16:05:41.000000000","message":"The wait_for() classmethod still has a hardcoded default timeout\u003d30 parameter, while the time.sleep() inside it was changed to use resource_check_interval. This creates an inconsistency: the interval is configurable but the timeout is not.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: The wait_for() helper is used for condition waits in scenario tests. Making only the sleep interval configurable but not the timeout is an incomplete refactor that may confuse operators expecting consistent configurability.\n\n**Suggestion**:\nEither make the wait_for() timeout configurable (e.g., default to resource_timeout), or add a brief comment explaining why this specific helper retains a fixed 30s timeout if intentional.","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"2eea62ca86c5f7b244ba47c2c79a5106282d1d55","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003d30):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":255,"context_line":"            if condition():"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3e8669a_991cc1e9","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":44},"in_reply_to":"5ae27a72_0ad4d609","updated":"2026-06-22 19:10:03.000000000","message":"Done","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59086396a2879998087f57830459a2734b43b210","unresolved":true,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003d30):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":255,"context_line":"            if condition():"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ae27a72_0ad4d609","line":252,"range":{"start_line":252,"start_character":33,"end_line":252,"end_character":44},"in_reply_to":"b55814ac_c26009ef","updated":"2026-06-22 18:07:08.000000000","message":"right we should default Timeout to  None i guess\nand then do \ntimeout \u003d timeout or CONF.optimize.resource_check_interval","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d5da15abfaa2bffc7fa56bad28e3394060b3d55a","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            # We need node status is enabled, so we check the node"},{"line_number":368,"context_line":"            # trait and delay if it is not the correct status."},{"line_number":369,"context_line":"            node_trait \u003d os_traits.COMPUTE_STATUS_DISABLED"},{"line_number":370,"context_line":"            retry \u003d math.ceil("},{"line_number":371,"context_line":"                CONF.optimize.resource_timeout"},{"line_number":372,"context_line":"                / CONF.optimize.resource_check_interval)"},{"line_number":373,"context_line":"            trait_status \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"dc502212_4413d37b","line":370,"updated":"2026-06-22 16:05:41.000000000","message":"Trait-removal retry loop polling frequency changed from 30s to 1s (default), a 30x increase. Previously: 20 retries sleeping 30s (10 min max). Now: 300 retries (ceil(300/1.0)) sleeping 1.0s. Total wall-clock similar, but 300 API polls vs 20 increases placement/nova API load.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: 300 polling iterations against placement/nova APIs per compute node where there were 20 before. In multi-node scenario tests this multiplies further, increasing API load and risk of rate-limiting or transient failures.\n\n**Priority**: Before merge\n**Why This Matters**: The original 30s interval was deliberate because the Nova update_available_resource periodic task runs on a ~60s cycle; polling every 1s does not help the trait clear faster and is wasteful. This loop needs a dedicated longer interval.\n\n**Recommendation**:\nIntroduce a separate config option (e.g., trait_check_interval with default 30) for this retry loop, or retain the original 30s sleep since the Nova periodic task cadence is unchanged. The 1s resource_check_interval is inappropriate for a periodic-task-driven condition.","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"59086396a2879998087f57830459a2734b43b210","unresolved":true,"context_lines":[{"line_number":367,"context_line":"            # We need node status is enabled, so we check the node"},{"line_number":368,"context_line":"            # trait and delay if it is not the correct status."},{"line_number":369,"context_line":"            node_trait \u003d os_traits.COMPUTE_STATUS_DISABLED"},{"line_number":370,"context_line":"            retry \u003d math.ceil("},{"line_number":371,"context_line":"                CONF.optimize.resource_timeout"},{"line_number":372,"context_line":"                / CONF.optimize.resource_check_interval)"},{"line_number":373,"context_line":"            trait_status \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6d781e3_54ad0253","line":370,"in_reply_to":"dc502212_4413d37b","updated":"2026-06-22 18:07:08.000000000","message":"we could but not it shoudl use the resocue timeout it is just an api request to placement in this case.","commit_id":"66069e3a33e1b84f2a5f0e35648ee1bd5dfab130"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            except Exception as exc:"},{"line_number":223,"context_line":"                LOG.exception(exc)"},{"line_number":224,"context_line":"                return False"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        assert test_utils.call_until_true("},{"line_number":227,"context_line":"            func\u003d_are_compute_nodes_setup,"},{"line_number":228,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3343a7a5_3ce30c53","line":225,"updated":"2026-06-24 21:58:08.000000000","message":"Several call sites previously used duration\u003d600 (10 minutes) for long-running operations like compute node setup, gnocchi measures, and audit completion. These are now capped at the default resource_timeout\u003d300 (5 minutes), halving the available wait time.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Scenario tests that legitimately need up to 10 minutes (e.g. compute_nodes_setup, gnocchi _show_measures, audit completion) may now time out at 5 minutes in slower deployments, producing intermittent failures.\n\n**Suggestion**:\nConsider raising the default resource_timeout to 600 to preserve backward compatibility for these long-running scenario paths, or document that operators in slow environments must override this value. At minimum, note the timeout reduction in the commit message.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d3ca243dd6d19890227b2c011b6390dd0518ef95","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        assert test_utils.call_until_true("},{"line_number":227,"context_line":"            func\u003d_are_compute_nodes_setup,"},{"line_number":228,"context_line":"            duration\u003dCONF.optimize.resource_timeout,"},{"line_number":229,"context_line":"            sleep_for\u003dCONF.optimize.resource_check_interval"},{"line_number":230,"context_line":"        )"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"68bf0724_28d7b945","line":228,"updated":"2026-06-24 16:31:28.000000000","message":"Scenario test timeouts halved from 600s to 300s. wait_for_compute_node_setup and several create_audit_and_wait / execute calls in scenario/base.py previously used duration\u003d600 but now use resource_timeout (default 300). Scenario tests involve slow end-to-end workflows.\n\n**Severity**: HIGH | **Confidence**: 0.8\n\n**Risk**: Scenario tests involving compute node setup, metric propagation, and audit execution may fail with timeout in busy CI environments where these operations regularly take more than 300 seconds.\n\n**Priority**: Before merge\n**Why This Matters**: Scenario tests run against real OpenStack deployments with multi-step workflows. A 600s timeout was chosen deliberately for these operations. Reducing it to 300s via a single global config value risks breaking existing CI pipelines.\n\n**Recommendation**:\nConsider using a higher default for resource_timeout (e.g., 600) to match the most conservative existing value, or add a separate scenario_timeout option for scenario tests that require longer waits.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d3ca243dd6d19890227b2c011b6390dd0518ef95","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baf2d40f_1dcf74d9","line":252,"updated":"2026-06-24 16:31:28.000000000","message":"The wait_for() helper silently returns None if the condition is never met. The default timeout increased from 30s to 300s (via CONF.optimize.resource_timeout), so a silently-failed condition now wastes up to 5 minutes with no error indication.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: If wait_for() is called with a condition that never becomes true, the test will silently wait up to 300 seconds then continue as if nothing happened, leading to confusing failures later in the test or false positives.\n\n**Suggestion**:\nAdd a raise or LOG.warning() after the while loop exits to indicate the condition was not met within the timeout. For example: if condition() was never True, raise an AssertionError or log a warning so test failures are clear.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"}],"source_content_type":"text/x-python","patch_set":2,"id":"86589a6f_da3d5ccc","line":252,"updated":"2026-06-24 21:58:08.000000000","message":"The wait_for() method does not return the condition result or raise on timeout. After the loop exits (timeout reached without condition becoming true), the method silently returns None. This is pre-existing but now that timeout is configurable it is worth noting.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Callers would be able to detect timeout failures rather than proceeding with an incorrect state, improving test reliability and debuggability.\n\n**Recommendation**:\nConsider returning the result of condition() or raising a meaningful exception when the deadline is reached, so callers do not silently proceed after a timeout. This could be done in a follow-up patch.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                rollback_func(svr_id, status\u003dstatus)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ff3fa94_b7b76ca4","line":252,"updated":"2026-06-24 21:58:08.000000000","message":"The wait_for() method signature changed timeout from a concrete default (30) to None with internal fallback. While no callers are found in-tree, tempest subclasses may call this inherited method expecting the old default behavior.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Prevents unexpected timeout behavior changes for any downstream or inherited callers that relied on the 30-second default.\n\n**Recommendation**:\nVerify no tempest framework code calls this wait_for() with the implicit 30s expectation. The current implementation already falls back to CONF only when timeout is None, which is correct -- just document the behavior change in the docstring.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"d3ca243dd6d19890227b2c011b6390dd0518ef95","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"},{"line_number":256,"context_line":"            if condition():"},{"line_number":257,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"a2320555_835da9b1","line":254,"updated":"2026-06-24 16:31:28.000000000","message":"The wait_for() method signature changed timeout from int (default 30) to None with a sentinel pattern using \u0027or\u0027 (timeout or CONF.optimize.resource_timeout). This means callers passing timeout\u003d0 would be overridden to the config default since 0 is falsy.\n\n**Severity**: SUGGESTION | **Confidence**: 0.7\n\n**Benefit**: Using \u0027if timeout is None\u0027 instead of \u0027timeout or\u0027 avoids the falsy-value pitfall where 0 is silently overridden by the config default, making the sentinel pattern more robust.\n\n**Recommendation**:\nChange \u0027deadline \u003d timeout or CONF.optimize.resource_timeout\u0027 to \u0027deadline \u003d timeout if timeout is not None else CONF.optimize.resource_timeout\u0027 to handle the edge case where a caller explicitly passes 0.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c309114383e74d31157e886646ab374d13b5249f","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"},{"line_number":256,"context_line":"            if condition():"},{"line_number":257,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"c454bece_c5288fab","line":254,"updated":"2026-06-22 19:20:38.000000000","message":"wait_for() now uses \u0027deadline \u003d timeout or CONF.optimize.resource_timeout\u0027. The \u0027or\u0027 idiom treats an explicitly passed timeout\u003d0 (or 0.0) as falsy and silently substitutes the config default, contrary to caller intent.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Any caller passing timeout\u003d0 expecting an immediate single-pass check (or no wait) instead gets a ~300s loop. The same \u0027timeout or CONF...\u0027 pattern repeats in wait_for_instances_in_model, wait_for_instances_attributes_in_model, and wait_delete_instances_from_model.\n\n**Suggestion**:\nUse \u0027deadline \u003d timeout if timeout is not None else CONF.optimize.resource_timeout\u0027 so only an unset (None) timeout falls back to config, preserving an explicit 0. Apply the same fix to the three model-wait helpers (lines 1100, 1139, 1171).","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"71f9c26c6a21e7b0839a02a341443ed0a6b548d1","unresolved":false,"context_lines":[{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def wait_for(cls, condition, timeout\u003dNone):"},{"line_number":253,"context_line":"        start_time \u003d time.time()"},{"line_number":254,"context_line":"        deadline \u003d timeout or CONF.optimize.resource_timeout"},{"line_number":255,"context_line":"        while time.time() - start_time \u003c deadline:"},{"line_number":256,"context_line":"            if condition():"},{"line_number":257,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"88ead903_2b632532","line":254,"in_reply_to":"c454bece_c5288fab","updated":"2026-06-24 12:34:11.000000000","message":"this is intresting\n\non one had i agree with the logic on the other hadn if you just want a single check you shoudl not use wait_for\n\nso we can ignore this but it is woth condiruuing\nor is correct as we want 0 to use the default config value\nalthough pass 0 is arguablle incorect and shoudl raises a value error to catch logic bugs","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c309114383e74d31157e886646ab374d13b5249f","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            # We need node status is enabled, so we check the node"},{"line_number":369,"context_line":"            # trait and delay if it is not the correct status."},{"line_number":370,"context_line":"            node_trait \u003d os_traits.COMPUTE_STATUS_DISABLED"},{"line_number":371,"context_line":"            retry \u003d math.ceil("},{"line_number":372,"context_line":"                CONF.optimize.resource_timeout"},{"line_number":373,"context_line":"                / CONF.optimize.resource_check_interval)"},{"line_number":374,"context_line":"            trait_status \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"3e0fa636_0a409a89","line":371,"updated":"2026-06-22 19:20:38.000000000","message":"Trait-removal retry loop changed materially. Original: retry\u003d20, sleep(30) -\u003e ~600s max over 20 placement checks. New: math.ceil(300/1.0)\u003d300 retries, sleep(1.0) -\u003e ~300s max over 300 check_node_trait calls. Max wait halved, API call frequency up 15x.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Placement/nova conflict resolution window is cut from ~10 min to ~5 min while making 15x more API calls, increasing flakiness risk on slow CI and load on the placement service.\n\n**Priority**: Before merge\n**Why This Matters**: This loop waits for Nova\u0027s update_available_resource periodic task to clear a COMPUTE_STATUS_DISABLED trait. The original 600s window existed because that periodic can take minutes; 300s may be too short, and 300 tight polls add avoidable placement load.\n\n**Recommendation**:\nIntroduce a dedicated option (e.g. trait_removal_timeout, default 600) and a separate trait_removal_interval (e.g. 30) so the retry count is derived from matching values, preserving both the ~600s window and the original poll cadence. Re-add the \u0027max delay time\u0027 comment with the new values.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"cdbf988b89c6980aa8a2fb729bb8a72b152a5e39","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            # We need node status is enabled, so we check the node"},{"line_number":369,"context_line":"            # trait and delay if it is not the correct status."},{"line_number":370,"context_line":"            node_trait \u003d os_traits.COMPUTE_STATUS_DISABLED"},{"line_number":371,"context_line":"            retry \u003d math.ceil("},{"line_number":372,"context_line":"                CONF.optimize.resource_timeout"},{"line_number":373,"context_line":"                / CONF.optimize.resource_check_interval)"},{"line_number":374,"context_line":"            trait_status \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3ff762_23a52369","line":371,"updated":"2026-06-24 21:58:08.000000000","message":"Trait-removal retry loop total wait time silently halved from 600s to 300s. Old code used retry\u003d20 with sleep(30) \u003d 600s max; new code uses math.ceil(300/1.0)\u003d300 retries with sleep(1) \u003d 300s max.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: In slow CI environments where Nova\u0027s update_available_resource periodic task takes longer than 5 minutes to remove the COMPUTE_STATUS_DISABLED trait, the retry loop will exhaust and assertNotEqual(0, retry) will fail, causing test flakes that did not occur previously.\n\n**Priority**: Before merge\n**Why This Matters**: The old comment explicitly documented \u0027the max delay time is 10 minutes\u0027 for this placement-trait race. This patch removes that comment and reduces the ceiling to 5 minutes without justification, risking new CI failures in congested environments.\n\n**Recommendation**:\nEither set resource_timeout default to 600 to preserve the original 10-minute ceiling, or introduce a dedicated trait_removal_timeout option that defaults to 600. Restore the removed comment documenting the expected delay rationale.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"71f9c26c6a21e7b0839a02a341443ed0a6b548d1","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            # We need node status is enabled, so we check the node"},{"line_number":369,"context_line":"            # trait and delay if it is not the correct status."},{"line_number":370,"context_line":"            node_trait \u003d os_traits.COMPUTE_STATUS_DISABLED"},{"line_number":371,"context_line":"            retry \u003d math.ceil("},{"line_number":372,"context_line":"                CONF.optimize.resource_timeout"},{"line_number":373,"context_line":"                / CONF.optimize.resource_check_interval)"},{"line_number":374,"context_line":"            trait_status \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"13c78af1_dff8aa70","line":371,"in_reply_to":"3e0fa636_0a409a89","updated":"2026-06-24 12:34:11.000000000","message":"this is a valid concern but its also intentional\n\nit would have been nice to capture that intent in the commit message","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"c309114383e74d31157e886646ab374d13b5249f","unresolved":false,"context_lines":[{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        # Check all instances are in the model and model is not empty"},{"line_number":1118,"context_line":"        while (not set(instance_pairs) \u003c\u003d set(model_pairs) or not model_pairs):"},{"line_number":1119,"context_line":"            time.sleep(CONF.optimize.model_check_interval)"},{"line_number":1120,"context_line":"            if time.time() \u003e\u003d timeout_end:"},{"line_number":1121,"context_line":"                raise Exception(\"Instances are not mapped to compute model.\")"},{"line_number":1122,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e34ba913_d91bbc67","line":1119,"updated":"2026-06-22 19:20:38.000000000","message":"Model-wait helpers now poll every model_check_interval (default 1.0s) instead of the original hardcoded 15s, a 15x increase in list_data_models API calls per wait. With timeout\u003d300 the loops now issue up to ~300 model-fetch HTTP requests instead of ~20.\n\n**Severity**: HIGH | **Confidence**: 0.9\n\n**Risk**: Each poll issues a GET to the Watcher compute data-model endpoint; a 15x call multiplier across every scenario test substantially increases load on watcher-decision-engine and the DB, and slows the suite via request overhead.\n\n**Priority**: Before merge\n**Why This Matters**: The Watcher compute model collector runs on its own periodic; the original 15s interval was chosen to align roughly with that cadence. Polling at 1.0s does not make the model appear faster and mainly adds wasted requests.\n\n**Recommendation**:\nSet model_check_interval default to 15.0 (matching prior behaviour) rather than 1.0, or document clearly that the default intentionally trades request volume for responsiveness. The same applies to the sibling sleeps at lines 1158 and 1182.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"71f9c26c6a21e7b0839a02a341443ed0a6b548d1","unresolved":false,"context_lines":[{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        # Check all instances are in the model and model is not empty"},{"line_number":1118,"context_line":"        while (not set(instance_pairs) \u003c\u003d set(model_pairs) or not model_pairs):"},{"line_number":1119,"context_line":"            time.sleep(CONF.optimize.model_check_interval)"},{"line_number":1120,"context_line":"            if time.time() \u003e\u003d timeout_end:"},{"line_number":1121,"context_line":"                raise Exception(\"Instances are not mapped to compute model.\")"},{"line_number":1122,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"2c4a8117_945331b3","line":1119,"in_reply_to":"e34ba913_d91bbc67","updated":"2026-06-24 12:34:11.000000000","message":"same this is intential but coudl have been called out mroe in the commit message.","commit_id":"5ef3d55f37e765e7a8068381b7becccb33757d02"}]}
