)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"726f65e3f518db113dc93ab0ce3189111bd766b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"7fa9580c_b7f73be4","updated":"2025-07-18 15:16:21.000000000","message":"Thanks for this test. It works fine but i\u0027d propose a modification, see my comment below.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e2ff5a4090ebe7e595c229bc48cbe2db8fe80629","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b110156f_33c6783f","updated":"2025-07-14 15:00:22.000000000","message":"lgtm, the test is running fine, I just left a question about a code comment","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"26cc552406712daa203ba706cb5d767c9a571362","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"107bfab4_83bc8574","updated":"2025-07-18 04:33:19.000000000","message":"recheck","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"2d3c0b6d8fdbc8a18e6d8835e83401b9511092ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"8b23ca42_e5861436","updated":"2025-07-17 03:32:51.000000000","message":"recheck","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fb0e605a264f84aa9871c754cbb1286d8373150f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a3d1bfa6_b4d1450f","updated":"2025-07-16 16:39:20.000000000","message":"recheck\n\ntest_execute_workload_balance_strategy_cpu test failed due to https://bugs.launchpad.net/watcher-tempest-plugin/+bug/2116875","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"7613cde6d63cdb5f7f407c297cdae96627b9da6e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1643bd6f_575cecff","in_reply_to":"a3d1bfa6_b4d1450f","updated":"2025-07-17 04:37:53.000000000","message":"May be we can merge this https://review.opendev.org/c/openstack/watcher/+/955169 Move workload_balance_strategy_cpu|ram tests to exclude list to unblock patches.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f0eface9b64fbeb0776ab222aec40e9291766d8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"fe8dcad3_efa6c320","updated":"2025-07-30 19:10:57.000000000","message":"Ty for your reviews, sorry for taking so long to update the patch 😞","commit_id":"55a0b5848e50bda68e7a45679c0b3e93a3cd0894"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e1b21134ed5c36ba6760f8afbc5f891c0cd11677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"dd2b4708_da5a5548","updated":"2025-09-17 15:15:30.000000000","message":"It is also failing in the cjeck because it is missing the minimal optimize api version, which should be 1.3 due to the dependency of data model list API (which is also not correct, since it is a dependency of the test and not the functionality)","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"36df2ae655401c3c4a82b4434730096ecc5ff7c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8bcfd314_5c6c074c","updated":"2025-08-01 01:05:47.000000000","message":"check-rdo","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"50824566cf7a7d17b09675347c138d37c3428e3f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"33e3ff25_4e93a3d0","updated":"2025-08-13 09:54:40.000000000","message":"https://a30b7efc0dacf693f5cc-ecaf00af307add09fcbeca6ed8261f40.ssl.cf5.rackcdn.com/openstack/7b31f175e09049babd7ee8a675b2ffd2/job-output.txt\n```\n2025-07-30 21:36:37.369417 | controller | {0} watcher_tempest_plugin.tests.scenario.test_continuous_audit.TestContinuousAudit.test_continuous_audit_zone_migration [62.729608s] ... ok\n```","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"697e60c14632fb2145b8d0060a616510ab1a2354","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"089b036a_8794ec1b","updated":"2025-09-03 09:43:52.000000000","message":"looks good, thanks Doug!","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5eab85d666c21b90cde0780511595add30818a22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"d8ee4108_347e697f","updated":"2025-09-17 11:29:23.000000000","message":"recheck\n\nlots of zone_migration fixes landed in the last days.","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"3f6bc4a2ce1aa195424e621520e45476789d2d04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"59520965_61d14088","updated":"2025-09-22 10:34:58.000000000","message":"looks much better now! thank you!","commit_id":"28716df3f7c34e484c1890d6b092559d60358264"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"59ca9beb346a6076f238c84029dddd9a0732e51d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"3aaa79e3_15edd433","updated":"2025-09-18 11:55:28.000000000","message":"note: since the config option to run the tests is disabled by default, the test will be skipped, and we can check the run here: https://review.opendev.org/c/openstack/watcher/+/961533","commit_id":"28716df3f7c34e484c1890d6b092559d60358264"}],"watcher_tempest_plugin/tests/scenario/test_continuous_audit.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"e2ff5a4090ebe7e595c229bc48cbe2db8fe80629","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Create a continuous audit using zone_migration strategy\"\"\""},{"line_number":58,"context_line":"        # NOTE(dviroel): We don\u0027t need to start the action plan to validate"},{"line_number":59,"context_line":"        # continous audits, but we need to create the workload and check if"},{"line_number":60,"context_line":"        # the strategy will updates from the model"},{"line_number":61,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"a64a43b5_c27f7682","line":60,"updated":"2025-07-14 15:00:22.000000000","message":"it\u0027s not clear what the last sentence of the comment means, is it `the strategy will get updates from the model`?","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f0eface9b64fbeb0776ab222aec40e9291766d8e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Create a continuous audit using zone_migration strategy\"\"\""},{"line_number":58,"context_line":"        # NOTE(dviroel): We don\u0027t need to start the action plan to validate"},{"line_number":59,"context_line":"        # continous audits, but we need to create the workload and check if"},{"line_number":60,"context_line":"        # the strategy will updates from the model"},{"line_number":61,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"a6ae986c_35f44e8d","line":60,"in_reply_to":"10b9da9b_44098be3","updated":"2025-07-30 19:10:57.000000000","message":"Done","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"84ffc711c8c04aa344bae326104192b13cadebf6","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        \"\"\"Create a continuous audit using zone_migration strategy\"\"\""},{"line_number":58,"context_line":"        # NOTE(dviroel): We don\u0027t need to start the action plan to validate"},{"line_number":59,"context_line":"        # continous audits, but we need to create the workload and check if"},{"line_number":60,"context_line":"        # the strategy will updates from the model"},{"line_number":61,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"10b9da9b_44098be3","line":60,"in_reply_to":"a64a43b5_c27f7682","updated":"2025-07-14 16:59:29.000000000","message":"reah, it is not clear enough. But yes, we need to run the audit only to check if we can get updates from the model.\nI can fix this is next PS\nTks Joan","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"726f65e3f518db113dc93ab0ce3189111bd766b7","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            \"compute_nodes\": [{\"src_node\": src_node}],"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # 3. Create a continuous audit that should propose"},{"line_number":149,"context_line":"        #    a RECOMMENDED action plan, with instance migrations"},{"line_number":150,"context_line":"        #    from src_host. Since it is the second continuos audit,"},{"line_number":151,"context_line":"        #    it should get a model updated from periodic collector"},{"line_number":152,"context_line":"        #    sync thread."},{"line_number":153,"context_line":"        _, audit \u003d self.create_audit("},{"line_number":154,"context_line":"            audit_template[\"uuid\"],"},{"line_number":155,"context_line":"            audit_type\u003d\"CONTINUOUS\","},{"line_number":156,"context_line":"            interval\u003d\"10\","},{"line_number":157,"context_line":"            parameters\u003daudit_parameters)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Wait until it reach the ONGOING state, otherwise fail"},{"line_number":160,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1abfa8eb_3813c357","line":157,"range":{"start_line":148,"start_character":0,"end_line":157,"end_character":40},"updated":"2025-07-18 15:16:21.000000000","message":"you are creating a continuous audit which creates an empty actionplan, then cancel the audit, create an instance and create a new audit.\n\nWhy not symplify it by skipping the cancel of the first and create the second one, and just wait for next execution of the audit after the model is sync with the created instance?\n\n1. Create a continuous audit.\n2. expect empty actionplan\n3. create instance and wait_for_instance_in_model\n4. next created actionplan from continuous audit should not be empty\n\nI think that would test better the scheduling part of the continuous instances. imagine a case where a continuous audit would run it just the first time, it would pass this test.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"8911525e99dde6cda6001c371d52005bdf7820b3","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            \"compute_nodes\": [{\"src_node\": src_node}],"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # 3. Create a continuous audit that should propose"},{"line_number":149,"context_line":"        #    a RECOMMENDED action plan, with instance migrations"},{"line_number":150,"context_line":"        #    from src_host. Since it is the second continuos audit,"},{"line_number":151,"context_line":"        #    it should get a model updated from periodic collector"},{"line_number":152,"context_line":"        #    sync thread."},{"line_number":153,"context_line":"        _, audit \u003d self.create_audit("},{"line_number":154,"context_line":"            audit_template[\"uuid\"],"},{"line_number":155,"context_line":"            audit_type\u003d\"CONTINUOUS\","},{"line_number":156,"context_line":"            interval\u003d\"10\","},{"line_number":157,"context_line":"            parameters\u003daudit_parameters)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Wait until it reach the ONGOING state, otherwise fail"},{"line_number":160,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"78a3d19b_45515f54","line":157,"range":{"start_line":148,"start_character":0,"end_line":157,"end_character":40},"in_reply_to":"1abfa8eb_3813c357","updated":"2025-07-18 17:06:44.000000000","message":"It is also possible to implement in this way, just needs to guarantee that is stable. We would need to guarantee that the action plan to be validated actually run after the model is updated, and not during the process or before it.\nThat\u0027s why creating 2 audits was simple, since any action plan from the second audit will need to have a action plan not empty.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"2c9eba475f92c9bb62f0b8409aa06cbb85f4ca02","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            \"compute_nodes\": [{\"src_node\": src_node}],"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # 3. Create a continuous audit that should propose"},{"line_number":149,"context_line":"        #    a RECOMMENDED action plan, with instance migrations"},{"line_number":150,"context_line":"        #    from src_host. Since it is the second continuos audit,"},{"line_number":151,"context_line":"        #    it should get a model updated from periodic collector"},{"line_number":152,"context_line":"        #    sync thread."},{"line_number":153,"context_line":"        _, audit \u003d self.create_audit("},{"line_number":154,"context_line":"            audit_template[\"uuid\"],"},{"line_number":155,"context_line":"            audit_type\u003d\"CONTINUOUS\","},{"line_number":156,"context_line":"            interval\u003d\"10\","},{"line_number":157,"context_line":"            parameters\u003daudit_parameters)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Wait until it reach the ONGOING state, otherwise fail"},{"line_number":160,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ac54709b_03ef7fa5","line":157,"range":{"start_line":148,"start_character":0,"end_line":157,"end_character":40},"in_reply_to":"78a3d19b_45515f54","updated":"2025-07-22 13:17:12.000000000","message":"Got it. for other continuous audit coverage is probably better to use a simpler strategy with nop action.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f0eface9b64fbeb0776ab222aec40e9291766d8e","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            \"compute_nodes\": [{\"src_node\": src_node}],"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # 3. Create a continuous audit that should propose"},{"line_number":149,"context_line":"        #    a RECOMMENDED action plan, with instance migrations"},{"line_number":150,"context_line":"        #    from src_host. Since it is the second continuos audit,"},{"line_number":151,"context_line":"        #    it should get a model updated from periodic collector"},{"line_number":152,"context_line":"        #    sync thread."},{"line_number":153,"context_line":"        _, audit \u003d self.create_audit("},{"line_number":154,"context_line":"            audit_template[\"uuid\"],"},{"line_number":155,"context_line":"            audit_type\u003d\"CONTINUOUS\","},{"line_number":156,"context_line":"            interval\u003d\"10\","},{"line_number":157,"context_line":"            parameters\u003daudit_parameters)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Wait until it reach the ONGOING state, otherwise fail"},{"line_number":160,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bd823c71_cc6fa018","line":157,"range":{"start_line":148,"start_character":0,"end_line":157,"end_character":40},"in_reply_to":"ac54709b_03ef7fa5","updated":"2025-07-30 19:10:57.000000000","message":"Thanks Alfredo, I changed the code to use the same audit as suggested, which in the end was good, since I started to hit a bug already reported[1]. Let\u0027s see if CI will hit the same. I will also provide a fix for this bug in watcher, and add a depends-on here if needed.\n\n[1] https://bugs.launchpad.net/watcher/+bug/2098984","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d8d9500d1822832ca08757364cf880687f6aed66","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            \"compute_nodes\": [{\"src_node\": src_node}],"},{"line_number":146,"context_line":"        }"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        # 3. Create a continuous audit that should propose"},{"line_number":149,"context_line":"        #    a RECOMMENDED action plan, with instance migrations"},{"line_number":150,"context_line":"        #    from src_host. Since it is the second continuos audit,"},{"line_number":151,"context_line":"        #    it should get a model updated from periodic collector"},{"line_number":152,"context_line":"        #    sync thread."},{"line_number":153,"context_line":"        _, audit \u003d self.create_audit("},{"line_number":154,"context_line":"            audit_template[\"uuid\"],"},{"line_number":155,"context_line":"            audit_type\u003d\"CONTINUOUS\","},{"line_number":156,"context_line":"            interval\u003d\"10\","},{"line_number":157,"context_line":"            parameters\u003daudit_parameters)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        # Wait until it reach the ONGOING state, otherwise fail"},{"line_number":160,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"f2eada00_6a543763","line":157,"range":{"start_line":148,"start_character":0,"end_line":157,"end_character":40},"in_reply_to":"bd823c71_cc6fa018","updated":"2025-08-06 15:03:19.000000000","message":"Thanks, I really like it. Nice work.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"2433bf3db1c0358b5305adec7acb7a62eb15a8e5","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        except ValueError:"},{"line_number":195,"context_line":"            self.fail(\"The audit failed to reach one of finished states.\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        _, action_plans \u003d self.client.list_action_plans("},{"line_number":198,"context_line":"            audit_uuid\u003daudit[\"uuid\"])"},{"line_number":199,"context_line":"        action_plan \u003d action_plans[\"action_plans\"][0]"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # Since a new run of the continuous audit will change the last"},{"line_number":202,"context_line":"        # action plan to CANCELLED. It is hard to guarantee that we will"}],"source_content_type":"text/x-python","patch_set":9,"id":"64372b24_58e0e464","line":199,"range":{"start_line":197,"start_character":7,"end_line":199,"end_character":53},"updated":"2025-07-16 08:42:29.000000000","message":"The above code is repeated at one more place at Line no: 129 to 131. The same is repeated in other files, I think I can move it a seperate function and reuse it here. \n\nOverall it the code changes look good.","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"f0eface9b64fbeb0776ab222aec40e9291766d8e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        except ValueError:"},{"line_number":195,"context_line":"            self.fail(\"The audit failed to reach one of finished states.\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        _, action_plans \u003d self.client.list_action_plans("},{"line_number":198,"context_line":"            audit_uuid\u003daudit[\"uuid\"])"},{"line_number":199,"context_line":"        action_plan \u003d action_plans[\"action_plans\"][0]"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # Since a new run of the continuous audit will change the last"},{"line_number":202,"context_line":"        # action plan to CANCELLED. It is hard to guarantee that we will"}],"source_content_type":"text/x-python","patch_set":9,"id":"946a36ae_72a5f718","line":199,"range":{"start_line":197,"start_character":7,"end_line":199,"end_character":53},"in_reply_to":"64372b24_58e0e464","updated":"2025-07-30 19:10:57.000000000","message":"yes, but it is also so small that I don\u0027t think that will bring any benefit here, just more indirection to other places, making hard to read","commit_id":"270d4a3a0a5869c8e2e58373a95d2ecde1f4ac80"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"32e4750aa0a576d0ae2f5974a4cfde05c3533a49","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(TestContinuousAudit, cls).skip_checks()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ae9cf4c5_06cdb7bc","line":34,"updated":"2025-09-17 11:49:42.000000000","message":"nit: if your just calling the parent i dont think you need to do this\nthis shoudl also use the moddern python3 super().skip_checks() syntax if we were calling the parent method","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0158af8b276855c766ac7daa5ca56145ba86398e","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def skip_checks(cls):"},{"line_number":34,"context_line":"        super(TestContinuousAudit, cls).skip_checks()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"}],"source_content_type":"text/x-python","patch_set":11,"id":"f880826c_a6e0ad39","line":34,"in_reply_to":"ae9cf4c5_06cdb7bc","updated":"2025-09-19 17:43:06.000000000","message":"Done","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"32e4750aa0a576d0ae2f5974a4cfde05c3533a49","unresolved":true,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"d4f4cd15_bbf8ba81","line":38,"updated":"2025-09-17 11:49:42.000000000","message":"nit: same here","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0158af8b276855c766ac7daa5ca56145ba86398e","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"2ef65260_062ead28","line":38,"in_reply_to":"d4f4cd15_bbf8ba81","updated":"2025-09-19 17:43:06.000000000","message":"Done","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"32e4750aa0a576d0ae2f5974a4cfde05c3533a49","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"},{"line_number":42,"context_line":"        if not CONF.compute_feature_enabled.live_migration:"},{"line_number":43,"context_line":"            raise cls.skipException(\"Live migration is not enabled\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        enabled_compute_nodes \u003d cls.get_enabled_compute_nodes()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        cls.wait_for_compute_node_setup()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if len(enabled_compute_nodes) \u003c 2:"},{"line_number":50,"context_line":"            raise cls.skipException("},{"line_number":51,"context_line":"                \"Less than 2 compute nodes are enabled, \""},{"line_number":52,"context_line":"                \"skipping multinode tests.\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @decorators.idempotent_id(\"bd6a18e9-bd51-4164-9e7f-4f19d9b428ba\")"},{"line_number":55,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"cdfe2aaf_a1ae5e0a","line":52,"range":{"start_line":39,"start_character":0,"end_line":52,"end_character":44},"updated":"2025-09-17 11:49:42.000000000","message":"https://github.com/openstack/tempest/blob/f47f0c410f9e24d99ddbaf5fc4468af64486397b/tempest/api/volume/base.py#L39-L53\n\nthese check shoudl be in skip_checks not resouce_setup\n\nskip_checks exits to allow you to specify the invariants that must hold for the test in a class to run.\n\nresource_setup is for creating neutron network or uploading iamges once that will be used and reused by the tests in a class\n\nso this is nto the correct plase to do this.\n\nim also nto sure we should be doing the enabled check.\nwe could but we generally shoudl not expect there to be any disabled nodes.\n\nanyway we can keep that but this should be moved to skip_checks and the resouce_setup funciton shoudl just be removed\n\nsince we are not doign any class level resouce setup.\n\nwe shoudl also be adding a watcher tempest pluging config option to enable this feature testing.\n\nsimilar to CONF.compute_feature_enabled.live_migration\n\nwithout that this will break stable branches which means we cant merge this until after 2025.2 is released.\n\nthe config option is better then a job update as that will also work for you locally witnout having to manually excult the test.","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0158af8b276855c766ac7daa5ca56145ba86398e","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"},{"line_number":42,"context_line":"        if not CONF.compute_feature_enabled.live_migration:"},{"line_number":43,"context_line":"            raise cls.skipException(\"Live migration is not enabled\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        enabled_compute_nodes \u003d cls.get_enabled_compute_nodes()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        cls.wait_for_compute_node_setup()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if len(enabled_compute_nodes) \u003c 2:"},{"line_number":50,"context_line":"            raise cls.skipException("},{"line_number":51,"context_line":"                \"Less than 2 compute nodes are enabled, \""},{"line_number":52,"context_line":"                \"skipping multinode tests.\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @decorators.idempotent_id(\"bd6a18e9-bd51-4164-9e7f-4f19d9b428ba\")"},{"line_number":55,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"333eade3_6505a768","line":52,"range":{"start_line":39,"start_character":0,"end_line":52,"end_character":44},"in_reply_to":"88bfc60a_0082ad17","updated":"2025-09-19 17:43:06.000000000","message":"Acknowledged","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"59ca9beb346a6076f238c84029dddd9a0732e51d","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"},{"line_number":42,"context_line":"        if not CONF.compute_feature_enabled.live_migration:"},{"line_number":43,"context_line":"            raise cls.skipException(\"Live migration is not enabled\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        enabled_compute_nodes \u003d cls.get_enabled_compute_nodes()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        cls.wait_for_compute_node_setup()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if len(enabled_compute_nodes) \u003c 2:"},{"line_number":50,"context_line":"            raise cls.skipException("},{"line_number":51,"context_line":"                \"Less than 2 compute nodes are enabled, \""},{"line_number":52,"context_line":"                \"skipping multinode tests.\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @decorators.idempotent_id(\"bd6a18e9-bd51-4164-9e7f-4f19d9b428ba\")"},{"line_number":55,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"88bfc60a_0082ad17","line":52,"range":{"start_line":39,"start_character":0,"end_line":52,"end_character":44},"in_reply_to":"89155ae6_58205c3e","updated":"2025-09-18 11:55:28.000000000","message":"I am proposing some changes here. All checks based on config were moved to skip_checks(). The validation of enabled compute nodes is still under resource_setup(), since it depends on clients configuration. Instead of skipping, if there is less than 2 enabled compute nodes, it will fail, since the configuration is to have at least 2 compute nodes. Not sure if is a good approach to fail in resource_setup() like that, or check\u0026fail inside each test here.","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"e1b21134ed5c36ba6760f8afbc5f891c0cd11677","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(TestContinuousAudit, cls).resource_setup()"},{"line_number":39,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":40,"context_line":"            raise cls.skipException("},{"line_number":41,"context_line":"                \"Less than 2 compute nodes, skipping multinode tests.\")"},{"line_number":42,"context_line":"        if not CONF.compute_feature_enabled.live_migration:"},{"line_number":43,"context_line":"            raise cls.skipException(\"Live migration is not enabled\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        enabled_compute_nodes \u003d cls.get_enabled_compute_nodes()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        cls.wait_for_compute_node_setup()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if len(enabled_compute_nodes) \u003c 2:"},{"line_number":50,"context_line":"            raise cls.skipException("},{"line_number":51,"context_line":"                \"Less than 2 compute nodes are enabled, \""},{"line_number":52,"context_line":"                \"skipping multinode tests.\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @decorators.idempotent_id(\"bd6a18e9-bd51-4164-9e7f-4f19d9b428ba\")"},{"line_number":55,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027zone_migration\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"89155ae6_58205c3e","line":52,"range":{"start_line":39,"start_character":0,"end_line":52,"end_character":44},"in_reply_to":"cdfe2aaf_a1ae5e0a","updated":"2025-09-17 15:15:30.000000000","message":"You are correct, we have a skip_checks() method for skipping them. It is there because was a copy and paste from other test classes, but I will try to fix. The only reason to be in resource_setup() is if the check depends on a previous resource_setup() which I don\u0027t think that is the case here.\nAck on the config option and thanks for raising the issue with stable branches, since the fix still need to be backported.\nAbout checking enabled compute nodes, I think that is valid to check, since we have other tests that would disable them (but they should enable again in the cleanup)\nI think that if len(enabled_compute_nodes) \u003c CONF.compute.min_compute_nodes we should actually fail. And only skip here if CONF.compute.min_compute_nodes \u003c 2.\nThere are lot of improvements I think, we may split them into other changes, to make easy to merge this test.\nI will provide a follow up soon.\nThanks.","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d8d9500d1822832ca08757364cf880687f6aed66","unresolved":true,"context_lines":[{"line_number":115,"context_line":"            audit_uuid\u003daudit[\"uuid\"])"},{"line_number":116,"context_line":"        action_plan \u003d action_plans[\"action_plans\"][0]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        # Since a new run of the continuous audit will change the last"},{"line_number":119,"context_line":"        # action plan to CANCELLED. It is hard to guarantee that we will"},{"line_number":120,"context_line":"        # always have a SUCCEEDED action plan."},{"line_number":121,"context_line":"        self.assertIn(action_plan[\u0027state\u0027], (\u0027SUCCEEDED\u0027, \u0027CANCELLED\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Action plan should have no actions"}],"source_content_type":"text/x-python","patch_set":11,"id":"38a1e454_bb7679b9","line":120,"range":{"start_line":118,"start_character":1,"end_line":120,"end_character":46},"updated":"2025-08-06 15:03:19.000000000","message":"good point, +1","commit_id":"b901eb7ca0856dd24d46f5932210858e982bbe09"}]}
