)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"658e8ef5dc33bd85b4d4ed54e5282ebb3809442f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9bce8b43_a718633b","updated":"2025-05-20 07:07:31.000000000","message":"recheck","commit_id":"9cad30c38625654a0e50ab19a44e7b723a29dd4d"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"0cd7ccbe318ec99853ac45b1f3754e08b342ebc2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7397e1d7_b0f2bf5b","updated":"2025-05-21 14:33:43.000000000","message":"recheck","commit_id":"a7ec8c667d5545d13625b8b613de94bd1495ad03"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"5ec1495b930d3951d7fd3b171d1c1406b98ae773","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"262cec2e_3ce56cf6","updated":"2025-05-27 08:35:38.000000000","message":"recheck","commit_id":"064a539b56ad3faf7d93d72fc98602fad488c1e6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"bccea0c74be2672852302b578a8126e8a4f3739d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bf61012f_4d095730","updated":"2025-05-26 09:33:41.000000000","message":"recheck","commit_id":"064a539b56ad3faf7d93d72fc98602fad488c1e6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"6396c5b63732eea7d0bac3fa46760b5911f3573d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"04c900fd_2cc93e47","updated":"2025-05-30 16:06:44.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"7efbd2f06d6f7c16e05e59ea4c8e8c6e62fee96c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"427ec1a0_d4023006","updated":"2025-06-02 18:28:24.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"66cec130c692f1484cd232ce392dd46675ae1cda","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"7ffa54a3_0715235d","updated":"2025-06-02 07:53:17.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"8da7140ed773e250f23260147701018d1b6f68c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"ccdf9617_45f328cb","updated":"2025-06-03 06:34:26.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"495366861ceda9c6429a178146e66e3ebb67c6de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e78fec68_0ac8e081","updated":"2025-06-02 11:02:25.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"e87fdf3ff7bc8871a1346a201b3662a495bef68c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f195e13e_c7de37a2","updated":"2025-06-02 12:46:48.000000000","message":"recheck","commit_id":"1186b1501e7c102b559af8ed5afe29e457f5eea6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"0ac86edd1f5ea6a5aedb6637eb69a38ae9977aba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"dcc56efe_68d62482","updated":"2025-06-03 10:05:22.000000000","message":"recheck","commit_id":"be83a4c9111d2b4a809760c8484611f8eb523aa0"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"19e58e8df6aa5d59735acb5f651f4525d143d988","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"e5949629_6c28b7f3","updated":"2025-06-03 12:14:44.000000000","message":"recheck","commit_id":"be83a4c9111d2b4a809760c8484611f8eb523aa0"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"34b5edd11246d655635b3f12387087b35db0c872","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"09e21868_a4dd79ef","updated":"2025-06-04 06:12:22.000000000","message":"recheck","commit_id":"4d08585cd668feb8efbe716113f8fcbf835011a5"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"8b0c31b68c033ea37e9467dd7355b98f1b8c7e48","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"b69933e8_8c6bb0b5","updated":"2025-06-04 10:21:58.000000000","message":"rechech","commit_id":"955975279975572808615579fa52c7dbb8cf6bad"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"b8078528303bac146578b739f68a858ee9d4d22b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"aedb4407_a9e89f5f","updated":"2025-06-04 10:22:19.000000000","message":"recheck","commit_id":"955975279975572808615579fa52c7dbb8cf6bad"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"dbdceabb8316a6ef5e7a2201ddf22b76130adf03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"1b740410_f3d644ad","updated":"2025-06-04 19:25:09.000000000","message":"recheck","commit_id":"b1539c09b1efa4b6ac59c50f53c7183988841bd4"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"6f5651ed9d7b66ec7a9405cac07d48321ab3d81b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"5a140423_2a4ea07b","updated":"2025-06-09 08:06:40.000000000","message":"recheck","commit_id":"fc8abdc6d2ad3522e9ed412ea26bb3d49c80983b"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"1a40f07d14b46b4be46bee660f9e8419201bf7f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"3ae6e317_b496c6e0","updated":"2025-06-09 14:46:28.000000000","message":"recheck","commit_id":"4e3d6f8c6a5e2c8c448307b1263b1e43eb7df1c2"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"4bf6ad32052c9912f4daa1285c51248bcdf7ddc4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"f869f15c_0f33b7ff","updated":"2025-06-09 12:54:28.000000000","message":"recheck","commit_id":"4e3d6f8c6a5e2c8c448307b1263b1e43eb7df1c2"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"3baff4356e2b1ced604872e7ad2825a243b92239","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"bf0d2992_133855cc","updated":"2025-06-10 13:26:25.000000000","message":"recheck","commit_id":"cb4cfd0197ba2e2468695527ff462c4fe2c78a5f"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"aa522180696d92dc373fe57427ed411a06c54a19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":33,"id":"ff4c9763_d01c0f75","updated":"2025-06-10 11:09:33.000000000","message":"recheck","commit_id":"cb4cfd0197ba2e2468695527ff462c4fe2c78a5f"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"2992d75b64dfb2419550fa9a7c5c392d01353882","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"17a72585_caa75f7d","updated":"2025-06-11 19:43:23.000000000","message":"recheck","commit_id":"d7fab5c6e978b8c34d0c64a4a03f743ef9ba6ec6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"e0106e6f1c608a32b40260e2ce8935c118df6c1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"52973e7d_d3c05918","updated":"2025-06-12 06:47:32.000000000","message":"recheck","commit_id":"d7fab5c6e978b8c34d0c64a4a03f743ef9ba6ec6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"1bff87a2ecaa73a69e247733cc01edfc7b6d4ab8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"fb4eff74_301d3844","updated":"2025-06-11 14:52:27.000000000","message":"recheck","commit_id":"d7fab5c6e978b8c34d0c64a4a03f743ef9ba6ec6"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"d4f09d20ac75ed514b17bb1ad644df1f1f78c00f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"6268a900_87a9fb86","updated":"2025-06-12 18:43:17.000000000","message":"recheck","commit_id":"a580f3fbda587bbe504e233a8ea40fd1993992f7"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"ad72feb868e20072ad737f169feba6ff53e4c03d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"06120a64_49509848","updated":"2025-06-13 13:00:20.000000000","message":"recheck","commit_id":"bf0cf3b0b3afb8311ee1454b116c0ca98a446474"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"7af53648917064413029741aae5224171677162c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"8250ec40_3ac62245","updated":"2025-06-16 12:11:23.000000000","message":"LGTM, looking at tests results:\nhttps://5f4531dcb84273a44c5e-11c736403b210e03aa568c45890a1263.ssl.cf5.rackcdn.com/openstack/ac6363db9260423dada548f7bacd7973/testr_results.html\n\n```\nDEBUG watcher.decision_engine.strategy.strategies.workload_balance [None req-ddd82365-9a53-4dbd-b16a-ae13c154e976 None None] Host usage for (f5b3c75f-06f3-48d1-8f33-3b3fdd1603a0): host_cpu_usage_percent is 35.000000, higher than threshold 15.000000 \n ...\n ...\nDEBUG watcher.decision_engine.strategy.strategies.workload_balance [None req-311aaef6-9da6-42f2-b687-21fed13c4127 None None] Host usage for (f5b3c75f-06f3-48d1-8f33-3b3fdd1603a0): host_ram_usage_percent is 7.897793, higher than threshold 2.500000\n```","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"c7396627c9316953cd922b14dd1a827c8a21b95d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"4d9a8efc_e3c7c423","updated":"2025-06-13 17:05:07.000000000","message":"recheck","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"7b119d617b9bbaf3f3efd18c035dc0c11e776d3e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"9462a2f8_ad21fa99","updated":"2025-06-13 14:58:45.000000000","message":"recheck","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"340a13d0e0dcdb74e7eba9b2bf3719da12aeb319","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"bf2f68fb_30872e52","updated":"2025-06-13 21:04:46.000000000","message":"recheck","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"62b59a7c6c74e66f0f6c6bf38ec065076a57bcc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"1c4ee50d_024fa496","updated":"2025-06-23 15:07:58.000000000","message":"Code looks good, but I don\u0027t see this test class running in any CI job anymore?","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f987fa9062e75663cbbfbbe4d6b767283e5d101b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"4f0bd348_9fab227b","updated":"2025-06-23 11:40:26.000000000","message":"recheck","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"68a7c7cf0eba2bb537d683e654a455d3ccea0702","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"4fad4b95_2dc249d5","updated":"2025-06-23 08:32:38.000000000","message":"recheck","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"70beff4f04212e02b692aadef491dc9beaa8bc3e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"7e5c7da9_624e8d3b","updated":"2025-06-23 07:04:32.000000000","message":"recheck","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"afdc1f2de30b46db428b1e4558124c9ab5ab1cfc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"fab5c0a0_8b531793","in_reply_to":"1c4ee50d_024fa496","updated":"2025-06-23 15:14:50.000000000","message":"It is running here https://logserver.rdoproject.org/966/rdoproject.org/9662ae617ef743cc9ce5966a2118d601/controller/ci-framework-data/tests/test_operator/tempest-tests-tempest/stestr_results.html in rdo third party job.\n\nBased on this https://github.com/openstack/watcher/blob/master/.zuul.yaml#L219.\nsince strategy tag is missing, so","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"85607dade18fb8542c620e9423039a66af806b33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"0af4c746_f4a99c9f","in_reply_to":"fab5c0a0_8b531793","updated":"2025-06-23 15:45:26.000000000","message":"yes, you are totally true, I missed the tag. let me update it\n\nlet me run a few more CI runs to check it","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fd220b5ebac88a7399e2210418b2445ba784b235","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"d12d2a27_b334147a","updated":"2025-06-23 17:27:00.000000000","message":"Thanks David, it is now running on CI job [1]\n\n[1] https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_eb1/openstack/eb191b005a7045b68143905e926a70ab/testr_results.html","commit_id":"32555fd04bbf32c0b9e5c2a2ceb5a2d6a5f1ab8f"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"919cb604231c7983230fb328673fde37aece8a3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"4a9d1a2d_8657f4e5","updated":"2025-06-24 04:08:15.000000000","message":"recheck","commit_id":"32555fd04bbf32c0b9e5c2a2ceb5a2d6a5f1ab8f"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"8d3917ba5f0fced61a99ccb6a32110fed456b172","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"b0a50a77_02f0408a","updated":"2025-06-24 07:40:17.000000000","message":"recheck","commit_id":"32555fd04bbf32c0b9e5c2a2ceb5a2d6a5f1ab8f"}],"watcher_tempest_plugin/tests/scenario/test_execute_strategies.py":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"512c10f5485e7e7f87e3536c003c066d23337c36","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    @decorators.idempotent_id(\u002764a9293f-0f81-431c-afae-ecabebae53f1\u0027)"},{"line_number":133,"context_line":"    def test_execute_workload_balance_strategy_cpu(self):"},{"line_number":134,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":135,"context_line":"        # after the instances will be migrated"},{"line_number":136,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"}],"source_content_type":"text/x-python","patch_set":44,"id":"04f1a09e_47f4be57","line":135,"updated":"2025-06-16 15:39:00.000000000","message":"should `migrated` here be `created`?","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f9d56be9f2c06a5ea4762da2a64a048fbcc2a726","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    @decorators.idempotent_id(\u002764a9293f-0f81-431c-afae-ecabebae53f1\u0027)"},{"line_number":133,"context_line":"    def test_execute_workload_balance_strategy_cpu(self):"},{"line_number":134,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":135,"context_line":"        # after the instances will be migrated"},{"line_number":136,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"}],"source_content_type":"text/x-python","patch_set":44,"id":"ab7ff24d_177c6250","line":135,"in_reply_to":"04f1a09e_47f4be57","updated":"2025-06-17 10:35:48.000000000","message":"no, the metrics are injected always after instance is created, but if we set it to True, they are created just after the instance is active.\n\nafter that, we need to create more instances, and sometimes move to another host and wait for the model to be updated, if we create the metrics before all that process, and the process takes too long, the metrics are ouf of the period of evaluation and the strategy fails.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2dbac85b644af57f63201e6150f6d4f3fa3c2bba","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    def test_execute_workload_balance_strategy_cpu(self):"},{"line_number":134,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":135,"context_line":"        # after the instances will be migrated"},{"line_number":136,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":44,"id":"9425f3b5_c8401fa2","line":136,"range":{"start_line":136,"start_character":6,"end_line":136,"end_character":30},"updated":"2025-06-16 14:18:10.000000000","message":"by the way this is not ment ot be a real data test so it hsould be injecting metrics.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4423315236765cc4875899e911cac258daa0ebb2","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    def test_execute_workload_balance_strategy_cpu(self):"},{"line_number":134,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":135,"context_line":"        # after the instances will be migrated"},{"line_number":136,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":44,"id":"f8a16984_21d41b76","line":136,"range":{"start_line":136,"start_character":6,"end_line":136,"end_character":30},"in_reply_to":"0521e37d_d943bf52","updated":"2025-06-17 12:12:22.000000000","message":"right i forgot to update this i realsed whyyou were doing it later.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f9d56be9f2c06a5ea4762da2a64a048fbcc2a726","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    def test_execute_workload_balance_strategy_cpu(self):"},{"line_number":134,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":135,"context_line":"        # after the instances will be migrated"},{"line_number":136,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":44,"id":"0521e37d_d943bf52","line":136,"range":{"start_line":136,"start_character":6,"end_line":136,"end_character":30},"in_reply_to":"9425f3b5_c8401fa2","updated":"2025-06-17 10:35:48.000000000","message":"I already answered this on the other message, we need to do it just before the metrics are going to be consumed, create them at the time we create the instance is to early","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7dcfb788e98718ca0f0a3a4f606cc5ffae409f4b","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"bdd0289a_e3e370cd","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"updated":"2025-06-16 14:16:48.000000000","message":"instead of invokeing this fucntion you should jsut directrly create the instnace in this test and inject the metric if desired. on not in this case.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"db31a324a017843c9490775a64338f072014a833","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"1564be0c_1811212f","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"09133a26_9c0320a5","updated":"2025-06-17 11:44:06.000000000","message":"@sean I think that we agree that a _create_server function on test class or on a base class is the right way. What I understood before and disagree is a C\u0026P of a create server code snippet in every test_ function.\nyes, there is a make_instance_statistic, i was considering having only the create_instances (without metrics) and another method to inject the fake metrics in a given list of instances, those can actually be methods of a base class for fake metrics tests...","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4423315236765cc4875899e911cac258daa0ebb2","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"c100cedc_1cda5fac","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"1564be0c_1811212f","updated":"2025-06-17 12:12:22.000000000","message":"so doing it in a test class is ok if all test need the same number of server and the same toplogy/configuration.\n\n\nthe best practic for tempest for readablity is to create the resouce in the test function when that is not the case.\n\nso there is a blance but the curren usage of  \nself._create_instances_per_host_with_statistic \n\nis quite litraly just a  _create_server in disguise.\n\nits is  an absaction for one very spefciic toptlogy (exactly 1 vm on every host with the same set of fake metrics)\n\nin generall that is not how most of our test shoudl be written.\n\n\nThe reason do creating the servers in the test code is locality of reasoning.\nit make it very clear exactly what resouce the test are using.\n\n\nperhaps we should ask for some of the tempest folks what there actrul best practic is.\n\nyou can read https://docs.openstack.org/tempest/latest/HACKING.html ot adovcate for either approch.\n\nCertainly the resource_setup function exits at the class level to help create the resources, and setUp can also be used for that.\n\n\nhttps://docs.openstack.org/tempest/latest/REVIEWING.html#reject-copy-and-paste-test-code\nand\nhttps://docs.openstack.org/tempest/latest/REVIEWING.html#being-explicit\n\nare in conflcit here.\n\ni do not consider it to be copy paste in this case.\n\nbut to dedupe it more would requrie defining a helper funciton or movign these tests to there own test class and creatin the instance at the class level.\n\n\ncreating a helper funciton may be be the least invasive approch here.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f9d56be9f2c06a5ea4762da2a64a048fbcc2a726","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"09133a26_9c0320a5","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"acfc945e_c1d5076b","updated":"2025-06-17 10:35:48.000000000","message":"I create the server without metrics because after creating, we need to wait for all the instances to be active, and the model to get them on the correct host.\nif this process takes longer than the fake metrics period, the strategy fails.\n\nSo the solution is to create the fake metrics just before they are going to be consumed.\n\nI agree with Doug, if we have a function for creating instances, lets enrich it with all the variables and casuistic we have, to avoid duplicate code.\n\nSometimes adding the metrics on the creation would be ok, sometimes no, that why we have the INJECT_METRICS variable","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0228c17f0e2942f469603e3e8a2b4cbf6a981304","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"acfc945e_c1d5076b","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"ba0b3cf9_3200df11","updated":"2025-06-16 18:21:20.000000000","message":"why woudl creating the server make it harder to reivee\nCreating the instance here or in a setup function for the clase is the normal convention in tempest and tempet plugins.\n\nUnless all test in a tempest class perform actions on a instance with the examc same flavor/image we typically always create the test resource i.e. server in the test function, not in helper functions.\n\nthat can make debugging much simpler and it makes it clear how many instance are created.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/volumes/test_attach_volume.py#L67-L73\n\nhttps://opendev.org/openstack/whitebox-tempest-plugin/src/branch/master/whitebox_tempest_plugin/api/compute/test_cpu_model_extra_flags.py#L34\n\nhttps://github.com/openstack/manila-tempest-plugin/blob/master/manila_tempest_tests/tests/scenario/test_share_basic_ops.py#L51\n\nThat is the normal pattern for the tempest test and watcher is currently diverging.\n\nwhere the server creationis  so common between test we often factor that out\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/volumes/test_attach_volume.py#L45-L58\n\nBut if a test needs a vm i expect to see a direct call to create it via some kind of create_test_server function.\n\nwatcher has not been following the normal convetions today nad that is quite confusing to review.\n\n\nceate_instances_per_host_with_statistic only really exists because they wanted ot have a function that created vms on all hosts because that was often used.\n\nit shoudl not be used to create jsut a signle vm.\n\nif we are not explcitly testing a case that requires a vm on every host such as worload consolitation, we should avoid that function.\n\n\nregarding splitting it isnt that what   self.make_instance_statistic(instance)\ndoes. inject metrics for a given instance?\n\nby the way the create_test_server function in tempest all internally register teh clean up of the server. so we do not need to od that here.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/api/compute/base.py#L208","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"647615a54f9cd2476f16132af844c07040d92e14","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":139,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":140,"context_line":"        instances \u003d self._create_instances_per_host_with_statistic("},{"line_number":141,"context_line":"            inject\u003dINJECT_METRICS,"},{"line_number":142,"context_line":"            num_instances\u003d4,"},{"line_number":143,"context_line":"            compute_node\u003dself.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":144,"context_line":"        )"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # wait for compute model updates"},{"line_number":147,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":44,"id":"ba0b3cf9_3200df11","line":144,"range":{"start_line":140,"start_character":8,"end_line":144,"end_character":9},"in_reply_to":"bdd0289a_e3e370cd","updated":"2025-06-16 17:47:05.000000000","message":"I think that we could split this function in 1) created nb of instances in a host or all hosts (which already returns a list of instances) and 2) inject fake metrics on theses instances.\nI\u0027m against creating instances here directly, it will duplicate code and make review harder imo. So more simple base functions could work.\nIt is confusing that we don\u0027t inject data here, and do this in the following lines, but I understood the reason behind it.","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"512c10f5485e7e7f87e3536c003c066d23337c36","unresolved":true,"context_lines":[{"line_number":166,"context_line":"    @decorators.idempotent_id(\u0027de4f662a-26b1-4cbe-ba8e-c213bac0a996\u0027)"},{"line_number":167,"context_line":"    def test_execute_workload_balance_strategy_ram(self):"},{"line_number":168,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":169,"context_line":"        # after the instances will be migrated"},{"line_number":170,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"}],"source_content_type":"text/x-python","patch_set":44,"id":"8ffbf679_37d8ec26","line":169,"updated":"2025-06-16 15:39:00.000000000","message":"same question as above","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"f9d56be9f2c06a5ea4762da2a64a048fbcc2a726","unresolved":true,"context_lines":[{"line_number":166,"context_line":"    @decorators.idempotent_id(\u0027de4f662a-26b1-4cbe-ba8e-c213bac0a996\u0027)"},{"line_number":167,"context_line":"    def test_execute_workload_balance_strategy_ram(self):"},{"line_number":168,"context_line":"        # This test requires metrics injection but they will be injected"},{"line_number":169,"context_line":"        # after the instances will be migrated"},{"line_number":170,"context_line":"        INJECT_METRICS \u003d False"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"}],"source_content_type":"text/x-python","patch_set":44,"id":"c5b66b01_c9c760c0","line":169,"in_reply_to":"8ffbf679_37d8ec26","updated":"2025-06-17 10:35:48.000000000","message":"see previous comment","commit_id":"cfb002facc8832a3a0fb5f61f685c9836a967efd"}],"watcher_tempest_plugin/tests/scenario/test_execute_workload_balance.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"0419f3107ab4e64059a9cb3a590c5d0302088786","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":58,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":59,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":60,"context_line":"        instances \u003d []"},{"line_number":61,"context_line":"        for _ in range(4):"},{"line_number":62,"context_line":"            instance \u003d self._create_instance(host)"},{"line_number":63,"context_line":"            instances.append(instance)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # wait for compute model updates"},{"line_number":66,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":49,"id":"7a47c0ab_9a35c80b","line":63,"range":{"start_line":60,"start_character":8,"end_line":63,"end_character":38},"updated":"2025-06-23 14:11:12.000000000","message":"Is it possible to wrap it in a method to create 4 vms on particular host? The reason I am saying as we are repeating similar code here as well as in real data tests.\n\n@viroel@gmail.com, Need your views on this.","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fd220b5ebac88a7399e2210418b2445ba784b235","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":58,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":59,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":60,"context_line":"        instances \u003d []"},{"line_number":61,"context_line":"        for _ in range(4):"},{"line_number":62,"context_line":"            instance \u003d self._create_instance(host)"},{"line_number":63,"context_line":"            instances.append(instance)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # wait for compute model updates"},{"line_number":66,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":49,"id":"c270481b_a0375a03","line":63,"range":{"start_line":60,"start_character":8,"end_line":63,"end_character":38},"in_reply_to":"759db7ea_8f514e9d","updated":"2025-06-23 17:27:00.000000000","message":"Acknowledged","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"62b59a7c6c74e66f0f6c6bf38ec065076a57bcc5","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        self.addCleanup(self.rollback_compute_nodes_status)"},{"line_number":58,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"},{"line_number":59,"context_line":"        host \u003d self.get_enabled_compute_nodes()[0][\u0027host\u0027]"},{"line_number":60,"context_line":"        instances \u003d []"},{"line_number":61,"context_line":"        for _ in range(4):"},{"line_number":62,"context_line":"            instance \u003d self._create_instance(host)"},{"line_number":63,"context_line":"            instances.append(instance)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # wait for compute model updates"},{"line_number":66,"context_line":"        self.wait_for_instances_in_model(instances)"}],"source_content_type":"text/x-python","patch_set":49,"id":"759db7ea_8f514e9d","line":63,"range":{"start_line":60,"start_character":8,"end_line":63,"end_character":38},"in_reply_to":"7a47c0ab_9a35c80b","updated":"2025-06-23 15:07:58.000000000","message":"I think that is ok to have this small loop to create as many instances the test needs. What we want to avoid is to repeat the create_instance logic in all tests. IMO this looks fine.","commit_id":"b8090a9aa32b90c7596a0f175b80bffe2f364285"}]}
