)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"da8ecda912119caaff05ebce1f6921348ba2ba69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c538f480_cd9130f9","updated":"2026-06-10 10:23:52.000000000","message":"I like this, I\u0027ve tested it helps reducing execution time almost linearly by reducing the source_nodes_percent. We may implement an automatic way of detecting the hosts with usage \u003e mean for the metric breaking the threshold instead of setting it statically in audit config, but would maintain the option to set it.\n\nAs commented in in https://review.opendev.org/c/openstack/watcher/+/988348/comment/7d4aa4dd_3c943c06/ there may be wider changes in the overall strategy design that would improve the performance but probably implementing these two changes can provide good-enough scalability. WTYT?","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"11f8e789eebf6c3e1a4dc8de9e6964c62a661e11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1dde24ad_20a6f1d7","updated":"2026-05-29 12:49:46.000000000","message":"Needs rebase on other fixes","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"916851a7071e8da078c7380da3149d4270292345","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0a9a4f8d_4241157e","updated":"2026-06-02 01:53:44.000000000","message":"One small comment about tests, otherwise looks good and straightforward. Nice!","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"8eb4ed6999a196f2eb7ea4e5b1e55c12cdc33739","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"251db0a5_c6a9e883","updated":"2026-07-27 13:36:48.000000000","message":"the implementation looks correct, but I think this could use more testing","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"}],"watcher/decision_engine/strategy/strategies/workload_stabilization.py":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"da8ecda912119caaff05ebce1f6921348ba2ba69","unresolved":true,"context_lines":[{"line_number":285,"context_line":"                    \"type\": \"number\","},{"line_number":286,"context_line":"                    \"minimum\": 1,"},{"line_number":287,"context_line":"                    \"maximum\": 100,"},{"line_number":288,"context_line":"                    \"default\": 100,"},{"line_number":289,"context_line":"                },"},{"line_number":290,"context_line":"                \"source_instances_percent\": {"},{"line_number":291,"context_line":"                    \"description\": \"Percentage of instances per source node \""}],"source_content_type":"text/x-python","patch_set":2,"id":"13cbd58c_400fcf39","line":288,"range":{"start_line":288,"start_character":0,"end_line":288,"end_character":2},"updated":"2026-06-10 10:23:52.000000000","message":"We may do an auto mode where the nodes with utilization above average for the metric which is \u003e threshold, are selected instead of a static percentage value.","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"},{"author":{"_account_id":36630,"name":"Winicius Allan Bezerra da Silva","display_name":"Winicius Allan","email":"winiciusab12@gmail.com","username":"winiciusallan"},"change_message_id":"916851a7071e8da078c7380da3149d4270292345","unresolved":true,"context_lines":[{"line_number":380,"context_line":"            host_loads.append((host_id, weighted_load))"},{"line_number":381,"context_line":"        return host_loads"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"    def get_most_loaded_hosts(self, hosts, n):"},{"line_number":384,"context_line":"        \"\"\"Return the N most loaded hosts sorted by weighted load descending."},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        :param hosts: dict of hosts with their load metrics"}],"source_content_type":"text/x-python","patch_set":2,"id":"890e0d3d_18b9c51e","line":383,"updated":"2026-06-02 01:53:44.000000000","message":"The function is simple, but do you think it\u0027s worth adding unit tests for it?","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"},{"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":"e2433a2de1215c2fc3c0de92aa096574e2ada24e","unresolved":false,"context_lines":[{"line_number":571,"context_line":"            c_nodes.remove(src_host)"},{"line_number":572,"context_line":"            node_list \u003d yield_nodes(c_nodes)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"            instances \u003d list(self.compute_model.get_node_instances(src_node))"},{"line_number":575,"context_line":"            amount_instances \u003d max("},{"line_number":576,"context_line":"                1,"},{"line_number":577,"context_line":"                math.ceil("}],"source_content_type":"text/x-python","patch_set":3,"id":"617f0aef_036250e7","line":574,"updated":"2026-08-26 19:54:41.000000000","message":"When source_instances_percent \u003c 100, instances[:amount_instances] takes the first N instances returned by compute_model.get_node_instances(), which builds its list from graph-predecessor iteration order, not by load. Unlike source_nodes_percent, which ranks hosts by weighted load descending (most loaded first), the instance subset is arbitrary relative to workload. Additionally, truncation happens before the watcher_exclude and instance-state filters inside the loop, so excluded and non-ACTIVE/PAUSED instances consume the selection budget.\n\n**Severity**: WARNING | **Confidence**: 0.8\n\n**Impact**: Operators lowering source_instances_percent get a workload-blind, model-order-dependent subset: the heaviest instances may never be evaluated while part of the reduced budget is spent on instances that are subsequently skipped by watcher_exclude or state checks, so plan quality can degrade more than the configured percentage implies and results vary with data-model construction order.\n\n**Suggestion**:\nApply the watcher_exclude and ACTIVE/PAUSED state filters before truncating, and rank the remaining candidates deterministically (e.g., by weighted instance load, or vcpus as a cheap proxy) so the evaluated subset matches the most-loaded-first semantics already used for source_nodes_percent; alternatively document that instance selection is arbitrary.","commit_id":"ec7adcdcc0d2097f3effbe342b5a6f7492b6ec4f"}],"watcher/tests/unit/decision_engine/strategy/strategies/test_workload_stabilization.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"8eb4ed6999a196f2eb7ea4e5b1e55c12cdc33739","unresolved":true,"context_lines":[{"line_number":111,"context_line":"                \u0027retry_count\u0027: 1,"},{"line_number":112,"context_line":"                \u0027least_loaded_count\u0027: 1,"},{"line_number":113,"context_line":"                \u0027least_loaded_percent\u0027: 50,"},{"line_number":114,"context_line":"                \u0027source_nodes_percent\u0027: 100,"},{"line_number":115,"context_line":"                \u0027source_instances_percent\u0027: 100,"},{"line_number":116,"context_line":"                \u0027periods\u0027: {\"instance\": 720, \"compute_node\": 600, \"node\": 0},"},{"line_number":117,"context_line":"                \u0027aggregation_method\u0027: {"}],"source_content_type":"text/x-python","patch_set":2,"id":"92788766_03fae81e","line":114,"updated":"2026-07-27 13:36:48.000000000","message":"I think we should add some testing using non-default values for the new parameters","commit_id":"2971bfdbae14764b24072dd31a55932026db4093"}]}
