)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"87caa6a88501a95fc7fb85676e5b815038ca9e52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c7b84160_d2764063","updated":"2025-03-26 15:50:06.000000000","message":"testing in https://review.opendev.org/945627","commit_id":"9f26971bf54b48091774abd6d843c57064645ed7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e14eebef2aad64d6e62f32448aa39ab114b6db86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"adf92806_28668785","updated":"2025-03-26 15:50:25.000000000","message":"testing it in https://review.opendev.org/945627","commit_id":"9f26971bf54b48091774abd6d843c57064645ed7"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"dde8f3f1_94dd9210","updated":"2025-03-27 07:19:17.000000000","message":"Overall looks good, great addition to tempest tests.","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"9e82d39fa20a6fa62e16157d9f36697427606b2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"443b5123_0e8201d0","updated":"2025-03-26 20:57:23.000000000","message":"tested in https://review.opendev.org/c/openstack/watcher/+/945627","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5852fa33_5078dd65","updated":"2025-03-27 15:32:32.000000000","message":"if it wasnt for the 5 min time.sleep i think it would be fine\nif we dont reduce that we shoudl annotat it with slow\n\n@decorators.attr(type\u003d\u0027slow\u0027)\n\nlike this\nhttps://github.com/openstack/tempest/blob/80c0477f78c71a2bd2e1a324c41cd2f50329b200/tempest/scenario/test_network_v6.py#L240-L244","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"93fb6649f1ed5fa891515816269359f6dcb8b451","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"bfc2994f_85869230","in_reply_to":"5852fa33_5078dd65","updated":"2025-03-27 16:32:55.000000000","message":"ack","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"91d7d628c58ba360808f7014b94b25d60713050c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"839dd44a_a2dbed5e","in_reply_to":"5852fa33_5078dd65","updated":"2025-03-27 17:01:00.000000000","message":"sorry didnt mean to resolve this","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ebf192c0e8e3f378e02fd9f332691d16c1aa0c53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a5cd482b_b241494b","in_reply_to":"839dd44a_a2dbed5e","updated":"2025-03-27 17:01:12.000000000","message":"Acknowledged","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3bda24f194a065b6630a973c6f5751fa9b2d788","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"2a26effa_83e3e3de","updated":"2025-04-01 10:17:30.000000000","message":"don\u0027t merge, failed in experimental pipeline in https://review.opendev.org/c/openstack/watcher/+/945627","commit_id":"9105b750310e54b2cce44422f118b0be32f7dfad"},{"author":{"_account_id":9976,"name":"Ronelle Landy","email":"rlandy@redhat.com","username":"rlandy"},"change_message_id":"28267a3aa261f1a920925611245554df421aa138","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f372ce31_4fdc9b7b","updated":"2025-04-02 20:59:16.000000000","message":"has run and passed in tests","commit_id":"e868c59f5743c3f6eff0f70bc29ffc1fdf668359"}],"watcher_tempest_plugin/tests/scenario/base.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":true,"context_lines":[{"line_number":223,"context_line":"        self.assertEqual(target_host, server_host, msg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _create_one_instance_per_host_with_statistic(self, metrics\u003ddict(),"},{"line_number":226,"context_line":"                                                     keypair\u003dNone):"},{"line_number":227,"context_line":"        \"\"\"Create 1 instance per compute node and make instance statistic"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        This goes up to the min_compute_nodes threshold so that things don\u0027t"}],"source_content_type":"text/x-python","patch_set":2,"id":"dbde5398_9921f08f","line":226,"updated":"2025-03-27 07:19:17.000000000","message":"instead of None, we can add keypair\u003ddict()","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"162c96338e578d9a9770e2333f18466f1f3e3ce2","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.assertEqual(target_host, server_host, msg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _create_one_instance_per_host_with_statistic(self, metrics\u003ddict(),"},{"line_number":226,"context_line":"                                                     keypair\u003dNone):"},{"line_number":227,"context_line":"        \"\"\"Create 1 instance per compute node and make instance statistic"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        This goes up to the min_compute_nodes threshold so that things don\u0027t"}],"source_content_type":"text/x-python","patch_set":2,"id":"d78782c8_b295e23e","line":226,"in_reply_to":"dbde5398_9921f08f","updated":"2025-03-27 07:55:33.000000000","message":"Done","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        This goes up to the min_compute_nodes threshold so that things don\u0027t"},{"line_number":230,"context_line":"        get crazy if you have 1000 compute nodes but set min to 3."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param metrics: The metrics add to resource when using Gnocchi"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        compute_nodes \u003d self.get_compute_nodes_setup()"},{"line_number":235,"context_line":"        instances \u003d self.mgr.servers_client.list_servers("}],"source_content_type":"text/x-python","patch_set":2,"id":"686facb3_61e558cf","line":232,"updated":"2025-03-27 07:19:17.000000000","message":"We can add doc string about new param\n```\n:param keypair: The keypair to use while creating instance\n```","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"162c96338e578d9a9770e2333f18466f1f3e3ce2","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        This goes up to the min_compute_nodes threshold so that things don\u0027t"},{"line_number":230,"context_line":"        get crazy if you have 1000 compute nodes but set min to 3."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param metrics: The metrics add to resource when using Gnocchi"},{"line_number":233,"context_line":"        \"\"\""},{"line_number":234,"context_line":"        compute_nodes \u003d self.get_compute_nodes_setup()"},{"line_number":235,"context_line":"        instances \u003d self.mgr.servers_client.list_servers("}],"source_content_type":"text/x-python","patch_set":2,"id":"67ff06ab_93c1d1c1","line":232,"in_reply_to":"686facb3_61e558cf","updated":"2025-03-27 07:55:33.000000000","message":"Done","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e86054aa3ff7eb8f12341d481e0896274f192691","unresolved":true,"context_lines":[{"line_number":265,"context_line":"            self.assertNotEqual(0, retry)"},{"line_number":266,"context_line":"            # by getting to active state here, this means this has"},{"line_number":267,"context_line":"            # landed on the host in question."},{"line_number":268,"context_line":"            instance \u003d self.create_server(image_id\u003dCONF.compute.image_ref,"},{"line_number":269,"context_line":"                                          wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":270,"context_line":"                                          clients\u003dself.os_primary,"},{"line_number":271,"context_line":"                                          **kwargs_server)"},{"line_number":272,"context_line":"            # get instance object again as admin"},{"line_number":273,"context_line":"            instance \u003d self.mgr.servers_client.show_server("},{"line_number":274,"context_line":"                instance[\u0027id\u0027])[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"884cc817_cd953567","line":271,"range":{"start_line":268,"start_character":12,"end_line":271,"end_character":58},"updated":"2025-03-27 09:13:28.000000000","message":"this is kind of incorrect\n\ntempest has function for creating vms with the ablity to ssh into them\nis based on configign the vm for validation.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/common/compute.py#L154\n\nthis funciton wrapps that\n\nhttps://github.com/openstack/tempest/blob/master/tempest/common/compute.py#L154\n\npassing in a keypari is fine but you also need to pass in a secirty gorup to make sure that ssh is actully allowed.\n\nthe defautll security group behaivor in neutron is to allow all traffic out and only allow traffic in form other vms in the same security gorup\n\nmeaning by default you cannot ping or ssh into a vm.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/scenario/test_snapshot_pattern.py#L52-L58\n\nit would also be better to change this to wait_until\u003d\u0027SSHABLE\u0027\nwhen we know we want to ssh into the vm.\n\nthat does requrie you to set up the validation resouces\n\nhttps://github.com/openstack/tempest/blob/80c0477f78c71a2bd2e1a324c41cd2f50329b200/tempest/api/volume/test_volumes_backup.py#L124-L128\n\nwhich internally will get the keypair security gorup and other setting require to ensure you can ssh into a vm via tempest config\n\nhttps://github.com/openstack/tempest/blob/master/tempest/test.py#L760-L769\n\nso ultimatily that the prefer way to make sshing into a vm work.\n\nthe current approch you are takign is assuming that the network the vm is booting on is routabel form where tempest is running.\n\nto work around that you built  _add_fip_instances to fix up the isntances isntaed of using the fucntionaltiy alreayd built into tempest ot ensure they are created properly in the first place.","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e05f74be8474deb42fc912635534e3e22e12eb9b","unresolved":true,"context_lines":[{"line_number":265,"context_line":"            self.assertNotEqual(0, retry)"},{"line_number":266,"context_line":"            # by getting to active state here, this means this has"},{"line_number":267,"context_line":"            # landed on the host in question."},{"line_number":268,"context_line":"            instance \u003d self.create_server(image_id\u003dCONF.compute.image_ref,"},{"line_number":269,"context_line":"                                          wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":270,"context_line":"                                          clients\u003dself.os_primary,"},{"line_number":271,"context_line":"                                          **kwargs_server)"},{"line_number":272,"context_line":"            # get instance object again as admin"},{"line_number":273,"context_line":"            instance \u003d self.mgr.servers_client.show_server("},{"line_number":274,"context_line":"                instance[\u0027id\u0027])[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b754316_93c18ab9","line":271,"range":{"start_line":268,"start_character":12,"end_line":271,"end_character":58},"in_reply_to":"1304c558_2439ee2a","updated":"2025-03-27 13:21:40.000000000","message":"Thanks for your input, i really think it\u0027s much cleaner in last PS","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c325cd7c24b610c7f63a2db2fc627c10e583949c","unresolved":true,"context_lines":[{"line_number":265,"context_line":"            self.assertNotEqual(0, retry)"},{"line_number":266,"context_line":"            # by getting to active state here, this means this has"},{"line_number":267,"context_line":"            # landed on the host in question."},{"line_number":268,"context_line":"            instance \u003d self.create_server(image_id\u003dCONF.compute.image_ref,"},{"line_number":269,"context_line":"                                          wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":270,"context_line":"                                          clients\u003dself.os_primary,"},{"line_number":271,"context_line":"                                          **kwargs_server)"},{"line_number":272,"context_line":"            # get instance object again as admin"},{"line_number":273,"context_line":"            instance \u003d self.mgr.servers_client.show_server("},{"line_number":274,"context_line":"                instance[\u0027id\u0027])[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1304c558_2439ee2a","line":271,"range":{"start_line":268,"start_character":12,"end_line":271,"end_character":58},"in_reply_to":"884cc817_cd953567","updated":"2025-03-27 11:25:28.000000000","message":"Given that this method is used by other tests which does not require instances to be reachable via ssh, my approach has been to try to touch as less as possible this method and avoid overcomplicating the methods and add secgroups, fips, etc... when we don\u0027t need it. That\u0027s why i put _add_fip_instances on top encapsulated into the TestRealExecuteStrategies where I expect to put all our \"real-data\" tests (btw, I took the methods to use from https://docs.openstack.org/tempest/latest/_modules/scenario/test_minimum_basic.html#TestMinimumBasicScenario.test_minimum_basic_scenario ).\n\nI can try to switch to use create_test_servers and provide some option in _create_one_instance_per_host_with_statistic to check when to configure all needed to use ssh. I specially like the idea of using user_data and not depend on the fip to be routable from the tempest server.","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            self.assertNotEqual(0, retry)"},{"line_number":266,"context_line":"            # by getting to active state here, this means this has"},{"line_number":267,"context_line":"            # landed on the host in question."},{"line_number":268,"context_line":"            instance \u003d self.create_server(image_id\u003dCONF.compute.image_ref,"},{"line_number":269,"context_line":"                                          wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":270,"context_line":"                                          clients\u003dself.os_primary,"},{"line_number":271,"context_line":"                                          **kwargs_server)"},{"line_number":272,"context_line":"            # get instance object again as admin"},{"line_number":273,"context_line":"            instance \u003d self.mgr.servers_client.show_server("},{"line_number":274,"context_line":"                instance[\u0027id\u0027])[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"eed1e3b9_76096979","line":271,"range":{"start_line":268,"start_character":12,"end_line":271,"end_character":58},"in_reply_to":"8b754316_93c18ab9","updated":"2025-03-27 15:32:32.000000000","message":"Acknowledged","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                    self.os_primary)"},{"line_number":275,"context_line":"                validatable \u003d True"},{"line_number":276,"context_line":"                script \u003d \u0027\u0027\u0027"},{"line_number":277,"context_line":"                         #!/bin/sh"},{"line_number":278,"context_line":"                         {run_command}"},{"line_number":279,"context_line":"                         \u0027\u0027\u0027.format(run_command\u003drun_command)"},{"line_number":280,"context_line":"                script_clean \u003d textwrap.dedent(script).lstrip().encode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"2227e105_42ffa94f","line":277,"range":{"start_line":277,"start_character":32,"end_line":277,"end_character":34},"updated":"2025-03-27 15:32:32.000000000","message":"it might be safer to use #!/bin/bash since we can\u0027t assume /bin/sh is bash","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"8918d3da952f896a46afde52a17e79ccb23654ea","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                    self.os_primary)"},{"line_number":275,"context_line":"                validatable \u003d True"},{"line_number":276,"context_line":"                script \u003d \u0027\u0027\u0027"},{"line_number":277,"context_line":"                         #!/bin/sh"},{"line_number":278,"context_line":"                         {run_command}"},{"line_number":279,"context_line":"                         \u0027\u0027\u0027.format(run_command\u003drun_command)"},{"line_number":280,"context_line":"                script_clean \u003d textwrap.dedent(script).lstrip().encode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"63566e37_d1462c85","line":277,"range":{"start_line":277,"start_character":32,"end_line":277,"end_character":34},"in_reply_to":"2227e105_42ffa94f","updated":"2025-04-01 07:28:40.000000000","message":"Done","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"7ca6ce8b8384b667a03c8cd8afd68ce127927a69","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                    self.os_primary)"},{"line_number":275,"context_line":"                validatable \u003d True"},{"line_number":276,"context_line":"                script \u003d \u0027\u0027\u0027"},{"line_number":277,"context_line":"                         #!/bin/sh"},{"line_number":278,"context_line":"                         {run_command}"},{"line_number":279,"context_line":"                         \u0027\u0027\u0027.format(run_command\u003drun_command)"},{"line_number":280,"context_line":"                script_clean \u003d textwrap.dedent(script).lstrip().encode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"d68d7e01_2619fb7c","line":277,"range":{"start_line":277,"start_character":32,"end_line":277,"end_character":34},"in_reply_to":"63566e37_d1462c85","updated":"2025-04-01 11:13:51.000000000","message":"Actually, i need to use /bin/sh as cirros does not provide /bin/bash. I think /bin/sh should provide a common enough shell for the simple scripts i expect we will use.","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"}],"watcher_tempest_plugin/tests/scenario/test_execute_strategies_real.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2019 ZTE Corporation"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"83b83e32_1748b097","line":2,"updated":"2025-03-27 07:19:17.000000000","message":"```suggestion\n# Copyright (c) 2025 Red Hat, Inc.\n```","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e86054aa3ff7eb8f12341d481e0896274f192691","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2019 ZTE Corporation"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"b1e345c6_76acb213","line":2,"in_reply_to":"37642126_0fdf1ee1","updated":"2025-03-27 09:13:28.000000000","message":"we shoudl never remvoe copy right noticves","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"162c96338e578d9a9770e2333f18466f1f3e3ce2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2019 ZTE Corporation"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":2,"id":"37642126_0fdf1ee1","line":2,"in_reply_to":"83b83e32_1748b097","updated":"2025-03-27 07:55:33.000000000","message":"Done","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        return ssh_ips"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _simulate_instance_load(self, ssh_ips, pkey, metric, period\u003d120):"},{"line_number":83,"context_line":"        command \u003d self.COMMANDS_CREATE_LOAD[metric]"},{"line_number":84,"context_line":"        for ip in ssh_ips:"},{"line_number":85,"context_line":"            client \u003d SshCmdClient("}],"source_content_type":"text/x-python","patch_set":2,"id":"d5d8fb19_8edb7eed","line":82,"range":{"start_line":82,"start_character":61,"end_line":82,"end_character":71},"updated":"2025-03-27 07:19:17.000000000","message":"Do we want to make it configurable in order simulate more load?","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"bc89d889b9ced5a893f142c2e1534e1c6cf0be1c","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        return ssh_ips"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _simulate_instance_load(self, ssh_ips, pkey, metric, period\u003d120):"},{"line_number":83,"context_line":"        command \u003d self.COMMANDS_CREATE_LOAD[metric]"},{"line_number":84,"context_line":"        for ip in ssh_ips:"},{"line_number":85,"context_line":"            client \u003d SshCmdClient("}],"source_content_type":"text/x-python","patch_set":2,"id":"1303ffed_0a984925","line":82,"range":{"start_line":82,"start_character":61,"end_line":82,"end_character":71},"in_reply_to":"d5d8fb19_8edb7eed","updated":"2025-03-27 07:48:27.000000000","message":"As it will be used with in the tests, for each test period will be set differently based on different strategies.\n\nWe donot need to configure it here,","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"799fa43ebb31a413a79e6271a47a1e28562b43b6","unresolved":true,"context_lines":[{"line_number":102,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":103,"context_line":"        LOG.info(f\"instances {instances}\")"},{"line_number":104,"context_line":"        ssh_ips \u003d self._add_fip_instances(instances)"},{"line_number":105,"context_line":"        self._simulate_instance_load(ssh_ips, keypair[\u0027private_key\u0027],"},{"line_number":106,"context_line":"                                     \"instance_cpu_usage\", period\u003d300)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        audit_parameters \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"a6fbab0c_393f334c","line":105,"updated":"2025-03-27 07:19:17.000000000","message":"Based on test results from experimental job https://review.opendev.org/c/openstack/watcher/+/945627 and https://d908b02d111fd5c6b667-640db1b5698c3be50cf344c315f092ff.ssl.cf5.rackcdn.com/openstack/cc765ed096af4878ac47a148deae3b90/controller/logs/tempest_log.txt\n```\n2025-03-26 19:56:27.223 107720 DEBUG tempest.lib.common.utils.test_utils [-] Call wait_for_secgroup_add returns true in 0.213401 seconds call_until_true /opt/stack/tempest/tempest/lib/common/utils/test_utils.py:118\n2025-03-26 19:56:27.233 107720 DEBUG watcher_tempest_plugin.services.base [-] Executing command \u0027nohup dd if\u003d/dev/random of\u003d/dev/null \u0026\u0027 on host \u0027172.24.5.36\u0027 exec_cmd /opt/stack/tempest/.tox/tempest/lib/python3.12/site-packages/watcher_tempest_plugin/services/base.py:308\n2025-03-26 19:56:27.233 107720 INFO tempest.lib.common.ssh [-] Creating ssh connection to \u0027172.24.5.36:22\u0027 as \u0027cirros\u0027 with public key authentication\n2025-03-26 19:56:27.336 107720 INFO paramiko.transport [-] Connected (version 2.0, client dropbear_2020.81)\n2025-03-26 19:56:27.517 107720 INFO paramiko.transport [-] Authentication (publickey) successful!\n2025-03-26 19:56:27.518 107720 INFO tempest.lib.common.ssh [-] ssh connection to cirros@172.24.5.36 successfully created\n2025-03-26 19:56:27.591 107720 DEBUG watcher_tempest_plugin.services.base [-] Executing command \u0027nohup dd if\u003d/dev/random of\u003d/dev/null \u0026\u0027 on host \u0027172.24.5.126\u0027 exec_cmd /opt/stack/tempest/.tox/tempest/lib/python3.12/site-packages/watcher_tempest_plugin/services/base.py:308\n2025-03-26 19:56:27.591 107720 INFO tempest.lib.common.ssh [-] Creating ssh connection to \u0027172.24.5.126:22\u0027 as \u0027cirros\u0027 with public key authentication\n2025-03-26 19:56:27.610 107720 WARNING tempest.lib.common.ssh [-] Failed to establish authenticated ssh connection to cirros@172.24.5.126 ([Errno None] Unable to connect to port 22 on 172.24.5.126). Number attempts: 1. Retry after 2 seconds.: paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 172.24.5.126\n2025-03-26 19:56:30.114 107720 WARNING tempest.lib.common.ssh [-] Failed to establish authenticated ssh connection to cirros@172.24.5.126 ([Errno None] Unable to connect to port 22 on 172.24.5.126). Number attempts: 2. Retry after 3 seconds.: paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 172.24.5.126\n2025-03-26 19:56:33.819 107720 INFO paramiko.transport [-] Connected (version 2.0, client dropbear_2020.81)\n2025-03-26 19:56:34.248 107720 INFO paramiko.transport [-] Authentication (publickey) successful!\n2025-03-26 19:56:34.249 107720 INFO tempest.lib.common.ssh [-] ssh connection to cirros@172.24.5.126 successfully created\n2025-03-26 20:01:34.959 107720 INFO tempest.lib.common.rest_client [-] Request (TestRealExecuteStrategies:test_workload_stabilization_strategy): 200 GET https://213.32.79.37/infra-optim/v1/goals/workload_balancing 0.454s\n2025-03-26 20:01:34.960 107720 DEBUG tempest.lib.common.rest_client [-] Request - Headers: {\u0027Content-Type\u0027: \u0027application/json\u0027, \u0027Accept\u0027: \u0027application/json\u0027, \u0027OpenStack-API-Version\u0027: \u0027infra-optim 1.4\u0027, \u0027X-Auth-Token\u0027: \u0027\u003comitted\u003e\u0027}\n        Body: None\n```\nand tempest tests results: https://d908b02d111fd5c6b667-640db1b5698c3be50cf344c315f092ff.ssl.cf5.rackcdn.com/openstack/cc765ed096af4878ac47a148deae3b90/testr_results.html","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":103,"context_line":"        LOG.info(f\"instances {instances}\")"},{"line_number":104,"context_line":"        ssh_ips \u003d self._add_fip_instances(instances)"},{"line_number":105,"context_line":"        self._simulate_instance_load(ssh_ips, keypair[\u0027private_key\u0027],"},{"line_number":106,"context_line":"                                     \"instance_cpu_usage\", period\u003d300)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        audit_parameters \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"7526940e_ac90313d","line":105,"in_reply_to":"04542261_ab7bc239","updated":"2025-03-27 15:32:32.000000000","message":"Acknowledged","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"cad02b14866d1e48e1b15fe1e5e03f6e409eae5d","unresolved":true,"context_lines":[{"line_number":102,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":103,"context_line":"        LOG.info(f\"instances {instances}\")"},{"line_number":104,"context_line":"        ssh_ips \u003d self._add_fip_instances(instances)"},{"line_number":105,"context_line":"        self._simulate_instance_load(ssh_ips, keypair[\u0027private_key\u0027],"},{"line_number":106,"context_line":"                                     \"instance_cpu_usage\", period\u003d300)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        audit_parameters \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"04542261_ab7bc239","line":105,"in_reply_to":"a6fbab0c_393f334c","updated":"2025-03-27 07:49:53.000000000","message":"Thanks for the links, also about the metrics, from https://d908b02d111fd5c6b667-640db1b5698c3be50cf344c315f092ff.ssl.cf5.rackcdn.com/openstack/cc765ed096af4878ac47a148deae3b90/controller/logs/screen-watcher-decision-engine.txt \n\n```\nMar 26 20:01:35.984006 np0040283137 watcher-decision-engine[98502]: DEBUG watcher.decision_engine.strategy.strategies.workload_stabilization [None req-2d661d66-bae8-43ca-80ea-33cebeebe1ef None None] Load of instance_cpu_usage for 47cb60d1-1019-4100-b393-2270cc010516 is 0.014116071428571787 {{(pid\u003d98502) get_hosts_load /opt/stack/watcher/watcher/decision_engine/strategy/strategies/workload_stabilization.py:329}}\n\nMar 26 20:01:35.989131 np0040283137 watcher-decision-engine[98502]: DEBUG watcher.decision_engine.strategy.strategies.workload_stabilization [None req-2d661d66-bae8-43ca-80ea-33cebeebe1ef None None] Load of instance_cpu_usage for 3c1e7621-5779-488c-98a7-86e97252748d is 0.30973214285714334 {{(pid\u003d98502) get_hosts_load /opt/stack/watcher/watcher/decision_engine/strategy/strategies/workload_stabilization.py:329}}\n\nMar 26 20:01:35.989536 np0040283137 watcher-decision-engine[98502]: INFO watcher.decision_engine.strategy.strategies.workload_stabilization [None req-2d661d66-bae8-43ca-80ea-33cebeebe1ef None None] Standard deviation for instance_cpu_usage is 0.14780803571428577.\nMar 26 20:01:35.989886 np0040283137 watcher-decision-engine[98502]: INFO watcher.decision_engine.strategy.strategies.workload_stabilization [None req-2d661d66-bae8-43ca-80ea-33cebeebe1ef None None] Standard deviation of instance_cpu_usage exceeds appropriate threshold 0.1 by 0.14780803571428577.\n```","commit_id":"e0ed90eb81811872614f6bef9b734533bfe71d74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e86054aa3ff7eb8f12341d481e0896274f192691","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2025 Red Hat, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":3,"id":"a8fa3c17_3cb12adb","line":2,"range":{"start_line":2,"start_character":2,"end_line":2,"end_character":34},"updated":"2025-03-27 09:13:28.000000000","message":"it would be better to never add copyright notices to the files\n\nthey are not required upstream and actively discouraged for new files.\n\nonly the license is needed.\n\nthe encoding marker is also not needed but is fine.\npython3 is utf-8 by default\n\npython 2 was not which is why this used to be added but its not needed in modern files.","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e05f74be8474deb42fc912635534e3e22e12eb9b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright (c) 2025 Red Hat, Inc."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ea0a1e6_a6ee5d3b","line":2,"range":{"start_line":2,"start_character":2,"end_line":2,"end_character":34},"in_reply_to":"a8fa3c17_3cb12adb","updated":"2025-03-27 13:21:40.000000000","message":"Done","commit_id":"0b3637e245bca6ef5a30d7293cc050705da0bd1b"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    # Commands used to create load for different metrics"},{"line_number":29,"context_line":"    COMMANDS_CREATE_LOAD \u003d dict("},{"line_number":30,"context_line":"        instance_cpu_usage\u003d\u0027nohup dd if\u003d/dev/random of\u003d/dev/null \u0026\u0027,)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e38a7a4d_571c5ac6","line":30,"updated":"2025-03-27 15:32:32.000000000","message":"that will defintly create load :)","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"23014427a3e0e982f16d9967c04d756d7e96cfe0","unresolved":true,"context_lines":[{"line_number":65,"context_line":"            run_command\u003dself.COMMANDS_CREATE_LOAD[\u0027instance_cpu_usage\u0027])"},{"line_number":66,"context_line":"        self._pack_all_created_instances_on_one_host(instances)"},{"line_number":67,"context_line":"        # This is the time that we want to generate metrics"},{"line_number":68,"context_line":"        time.sleep(300)"},{"line_number":69,"context_line":"        # wait for compute model updates"},{"line_number":70,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"00a99c52_10d6db3c","line":68,"updated":"2025-03-27 15:32:32.000000000","message":"That\u0027s pretty excessive. 30 seconds, maybe, but since we run this serially, that adds 5 mins directly to every job that has this enabled.","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"93fb6649f1ed5fa891515816269359f6dcb8b451","unresolved":true,"context_lines":[{"line_number":65,"context_line":"            run_command\u003dself.COMMANDS_CREATE_LOAD[\u0027instance_cpu_usage\u0027])"},{"line_number":66,"context_line":"        self._pack_all_created_instances_on_one_host(instances)"},{"line_number":67,"context_line":"        # This is the time that we want to generate metrics"},{"line_number":68,"context_line":"        time.sleep(300)"},{"line_number":69,"context_line":"        # wait for compute model updates"},{"line_number":70,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5b760a9f_9e54022d","line":68,"in_reply_to":"00a99c52_10d6db3c","updated":"2025-03-27 16:32:55.000000000","message":"30-60secs is probably enough for upstream jobs where we  have some flexibility to setup polling interval in both prometheus and ceilometer, but in operators env, that\u0027s hardcoded to 120secs https://github.com/openstack-k8s-operators/telemetry-operator/blob/7cc05b83658fab71f30fff180b23f37983db9809/templates/ceilometercompute/config/polling.yaml#L4 (there will be an option to configure that from operators, but not in place yet) that\u0027s where the 300 comes from, we need at least two points.\n\nWould be worthy to make that a parameter in tempest.conf [optimize] section?","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"91d7d628c58ba360808f7014b94b25d60713050c","unresolved":true,"context_lines":[{"line_number":65,"context_line":"            run_command\u003dself.COMMANDS_CREATE_LOAD[\u0027instance_cpu_usage\u0027])"},{"line_number":66,"context_line":"        self._pack_all_created_instances_on_one_host(instances)"},{"line_number":67,"context_line":"        # This is the time that we want to generate metrics"},{"line_number":68,"context_line":"        time.sleep(300)"},{"line_number":69,"context_line":"        # wait for compute model updates"},{"line_number":70,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"e88456a8_c2d3b1ed","line":68,"in_reply_to":"5b760a9f_9e54022d","updated":"2025-03-27 17:01:00.000000000","message":"it probaly shoudl be configurable yes.\n\nsince the interval depend on how the cloud is configured.","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c0790a1e555e843fb104d75bcd8676ed3fbae1cb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            run_command\u003dself.COMMANDS_CREATE_LOAD[\u0027instance_cpu_usage\u0027])"},{"line_number":66,"context_line":"        self._pack_all_created_instances_on_one_host(instances)"},{"line_number":67,"context_line":"        # This is the time that we want to generate metrics"},{"line_number":68,"context_line":"        time.sleep(300)"},{"line_number":69,"context_line":"        # wait for compute model updates"},{"line_number":70,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"67e7ee38_d3c2e7e3","line":68,"in_reply_to":"e88456a8_c2d3b1ed","updated":"2025-03-31 19:30:25.000000000","message":"Tested in https://github.com/openstack-k8s-operators/watcher-operator/pull/125 with optimize.real_workload_period\u003d300","commit_id":"0798ec34b4fc93e121c138bfe86db1f7689f2a74"}]}
