)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"0cd01e230bb454572f2c6ab4cc20914abaf7c17f","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add backup member tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces backup member tests to the octavia-tempest-plugin."},{"line_number":10,"context_line":"There are 9 new tests:"},{"line_number":11,"context_line":" - test_delete_backup()"},{"line_number":12,"context_line":" - test_default_to_backup()"},{"line_number":13,"context_line":" - test_backup_to_default()"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"340d8bcb_d14a0c32","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":22},"updated":"2023-12-06 09:07:40.000000000","message":"Nit\nWe are now having API and Scenario tests, so you can add this info into the commit message + mentioning the tests separately, like:\n\nAPI test:\n1 test_...\n2 test_...\n\nScenario tests:\n1 test_...\n2 test_...\n\nBTW I think that brackets () at the end of the test names aren\u0027t needed, like test_delete_backup and not test_delete_backup() is fine.","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add backup member tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces backup member tests to the octavia-tempest-plugin."},{"line_number":10,"context_line":"There are 9 new tests:"},{"line_number":11,"context_line":" - test_delete_backup()"},{"line_number":12,"context_line":" - test_default_to_backup()"},{"line_number":13,"context_line":" - test_backup_to_default()"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"48acf62e_8e69dc2c","line":10,"range":{"start_line":9,"start_character":0,"end_line":10,"end_character":22},"in_reply_to":"340d8bcb_d14a0c32","updated":"2023-12-11 10:51:46.000000000","message":"Done","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5f9edd9c_0ed5810d","updated":"2023-10-19 15:53:45.000000000","message":"Nice first o-t-p patch Lukas! I reviewed up to line 312\nI will review the rest of the patch soon","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"03d257172c74e30d5c5e94d17c8894e2e46f3157","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"26bec41b_e3367d7b","updated":"2023-10-20 08:20:23.000000000","message":"Thank you for the review so far!","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"fab76fb9_d1740b4b","updated":"2023-10-20 10:47:02.000000000","message":"I think we can reduce the number of the active members to 1 (so we will have 1 active member and 1 backup member), I think it would test the same backup member functionality. I would like to hear what are the thoughts of the other reviewers about it.\nI left a few additional comments, but apart from those, it looks good to me, thanks Lukas.","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"345274fdb6b4ccb1b11130e686d100ef61eee2d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ac825424_9b66e12a","updated":"2023-10-23 09:42:47.000000000","message":"Thanks for the review!","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a4345089_9011d23c","updated":"2023-10-26 14:23:32.000000000","message":"Can we reduce the number of servers and to have: 1, 2 as default and 3 as backup?\nI think that 3 servers is enough for most of the cases, it will also simplify the code and reduce tests\u0027 execution time.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"18fb6600_c9c6b343","updated":"2023-10-25 16:16:08.000000000","message":"Hi Lukas!\nThere is a need to work on this patch a bit more and to fix some stuff.\nNote: I didn\u0027t review the tests part yet, will do so soon.\nThanks!","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"4aeee4e7_54e47a5c","in_reply_to":"18fb6600_c9c6b343","updated":"2023-11-06 12:01:13.000000000","message":"Thank you! I updated the patch and I added comments when I felt like a change was not needed.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"cb27e495_a0c4f8b8","updated":"2023-11-28 14:13:50.000000000","message":"Hi Lukas!\n\nExcept of some nits, there is a major one: https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/comment/c402d883_86c27cfa/ that requires some code changes.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bf8b450c_ddbf8173","updated":"2023-11-30 14:58:59.000000000","message":"Thank you, Arkady again for the review!:)","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"0cd01e230bb454572f2c6ab4cc20914abaf7c17f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"b880b202_31326593","updated":"2023-12-06 09:07:40.000000000","message":"1) As of now there are API tests covering: Create, Update, Delete and Show, let\u0027s add one for List API as well. Some basic test than will check that the backup member, once created, is listed in \"List API\" result.\n2) Consider adding some negative scenarios for \"backup\" flag, for example you can try to create/update backup member with missing/invalid value for backup and see that the API responds with appropriate error code.","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"6e7bb4a800568012bae5a97b629707a4c6a8eaa9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"d0297887_8f366c0c","updated":"2023-12-13 18:38:23.000000000","message":"API part looks good to me, I\u0027ll continue with Scenario part tomorrow.\nThanks Lukas!","commit_id":"ac8b5e5234b224ca6510c49aa858a4ce719222b5"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"646c4d86_8f89a649","updated":"2023-12-14 15:32:41.000000000","message":"Hi Lukas!\n\nExcept of some nits (comments, duplicate lines...) code looks good to me.\n\nThanks!","commit_id":"ac8b5e5234b224ca6510c49aa858a4ce719222b5"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"e4176011151580f0017d7e16da40fc35fe2ab953","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9d23007c_54786153","updated":"2023-12-13 13:31:25.000000000","message":"lgtm, if the tests run successfully in a job, then this is ready to be merged, isn\u0027t it?","commit_id":"ac8b5e5234b224ca6510c49aa858a4ce719222b5"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"54d717db0257395ffbc7acb5ad689cee3c1a1ad9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"48177867_56cedc24","updated":"2023-12-18 15:45:26.000000000","message":"I think that\noctavia_tempest_plugin/tests/scenario/v2/test_backup_members.py\nshould be renamed to\noctavia_tempest_plugin/tests/scenario/v2/test_backup_members_traffic_ops.py\n\nit would match the regex that includes it in the scenario-traffic-ops job (instead of non-traffic-ops)","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"ae9361ac_af33fbf3","updated":"2023-12-15 09:59:30.000000000","message":"Thanks again Arkady!","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"24f6bb4560a3fc5999caf36e893c0e79b5c90628","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"b0f53a12_e2c37ba7","updated":"2023-12-17 12:17:36.000000000","message":"recheck\n\nFailed test does related to this patch changes: \"octavia_tempest_plugin.tests.scenario.v2.test_backup_members.BackupMembersTestIPv4.test_default_to_backup:, but it\u0027s not reproducible for me on my D/S setup + it has PASS in the previous Zuul check.","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"5aeac951cea0f0a3844290d4b1af20e5c34f494a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"5e6fafce_fba2d8dd","updated":"2023-12-18 17:01:23.000000000","message":"recheck\nThe jobs were not triggered for whatever reason by the last comment.","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"dae71d06019faf994d65c740431cf6f87938027d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"69f91a8a_dfeb9d64","updated":"2023-12-18 14:13:23.000000000","message":"soo, ready to be merged?","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"b0f8c56f2b0ab197d47c8e3e89eac6886f4f35e0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"45db86c7_a9b67862","in_reply_to":"2a5ff7a9_55f6ad48","updated":"2023-12-19 07:45:40.000000000","message":"parallel execution doesn\u0027t trigger \"immutable resources\", the Octavia resources are never shared across tempest threads, so we should never have a conflict.\n\nLooking at the backtrace in the tests https://819ad91dc12d42f85b71-1fe9c13f3ad3be9b5245fd657d5a9df7.ssl.cf5.rackcdn.com/897564/21/check/octavia-v2-dsvm-scenario-non-traffic-ops-stable-zed/1aed923/testr_results.html\n\n```\nTraceback (most recent call last):\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.8/site-packages/octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py\", line 580, in test_default_to_backup\n    self._test_default_to_backup()\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.8/site-packages/octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py\", line 491, in _test_default_to_backup\n    self.mem_member_client.update_member(self.member3[const.ID],\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.8/site-packages/octavia_tempest_plugin/common/decorators.py\", line 42, in wrapper\n    return f(*func_args, **func_kwargs)\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.8/site-packages/octavia_tempest_plugin/services/load_balancer/v2/member_client.py\", line 244, in update_member\n    return self._update_object(**kwargs)\n  File \"/opt/stack/tempest/.tox/tempest/lib/python3.8/site-packages/octavia_tempest_plugin/services/load_balancer/v2/base_client.py\", line 260, in _update_object\n    response, body \u003d self.put(request_uri, jsonutils.dumps(obj_dict))\n  File \"/opt/stack/tempest/tempest/lib/common/rest_client.py\", line 372, in put\n    return self.request(\u0027PUT\u0027, url, extra_headers, headers, body, chunked)\n  File \"/opt/stack/tempest/tempest/lib/common/rest_client.py\", line 742, in request\n    self._error_checker(resp, resp_body)\n  File \"/opt/stack/tempest/tempest/lib/common/rest_client.py\", line 867, in _error_checker\n    raise exceptions.Conflict(resp_body, resp\u003dresp)\ntempest.lib.exceptions.Conflict: Conflict with state of target resource\nDetails: {\u0027faultcode\u0027: \u0027Client\u0027, \u0027faultstring\u0027: \u0027Pool f5b130dc-319c-4716-a4be-f922919a6df9 is immutable and cannot be updated.\u0027, \u0027debuginfo\u0027: None}\n```\n\nat https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/21/octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py#491\n\nthe member is updated then we wait for the member to be ACTIVE, but before performing the next update, we should also wait for the LB to be ACTIVE. If a resource of this LB is updated before the LB is ACTIVE, the API returns an ERROR.","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c369e29a_32189d98","in_reply_to":"45db86c7_a9b67862","updated":"2023-12-19 12:44:07.000000000","message":"\u003e parallel execution doesn\u0027t trigger \"immutable resources\", the Octavia resources are never shared across tempest threads, so we should never have a conflict.\n\nYes, true. I\u0027ve sent this comment by accident. I thought I removed it. I just wanted to recheck the jobs.\n\n\u003e the member is updated then we wait for the member to be ACTIVE, but before performing the next update, we should also wait for the LB to be ACTIVE. If a resource of this LB is updated before the LB is ACTIVE, the API returns an ERROR.\n\nOh, ok. Thank you! I updated the patch so that we wait for the loadbalancer to become active. Just one question. I just wasn\u0027t sure whether we should wait also for the loadbalancer when we are testing the pausing/unpausing of the servers behind members (for example here [1]).\n\n[1] https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/22/octavia_tempest_plugin/tests/scenario/v2/test_backup_members_traffic_ops.py#466","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"9cba1a75bb1bfbd0c27475517f3da4b61169b351","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"fe3a2d3c_8ff1a1b3","in_reply_to":"45db86c7_a9b67862","updated":"2023-12-19 09:02:19.000000000","message":"Hi Greg!\n\nSo waiting for member in ACTIVE only is not enough and there is a need to verify that the LB itself is in ACTIVE.\nThere are probably more cases like this in the code where \"waiter for LB in ACTIVE\" is needed :( \n\nThanks!","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"090198cff14f2f7975b0366335e313f9e2fb8a6c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c111f131_bc3cd2e3","in_reply_to":"b0f53a12_e2c37ba7","updated":"2023-12-18 15:44:03.000000000","message":"I think it needs to be investigated: a POST /members failed because of:\n\nDec 15 10:44:12.781893 np0036049471 devstack@o-api.service[119035]: DEBUG wsme.api [None req-9276d799-dfb5-4ee6-8fe5-9b88070018d9 tempest-BackupMembersTestIPv6-967020003 tempest-BackupMembersTestIPv6-967020003-project] Client-side error: Pool f5b130dc-319c-4716-a4be-f922919a6df9 is immutable and cannot be updated\n\nThe previous API call updated a member 6fde049b-e88c-4866-9dbc-1f41c635456d\n\nin the worker logs, we see that the member was marked as ACTIVE:\nDec 15 10:44:11.382693 np0036049471 octavia-worker[120538]: DEBUG octavia.controller.worker.v2.tasks.database_tasks [None req-8a4db348-2ecf-4482-b541-c2bd43959247 None None] Mark ACTIVE in DB for member id: 6fde049b-e88c-4866-9dbc-1f41c635456d\n\nthen the LB was unlocked:\nDec 15 10:44:13.817179 np0036049471 octavia-worker[120538]: DEBUG octavia.controller.worker.v2.tasks.database_tasks [None req-8a4db348-2ecf-4482-b541-c2bd43959247 None None] Mark ACTIVE in DB for load balancer id: 0b2ad531-9510-4564-bdc4-e274731c5f9b\n\nso the test made the call before the LB was ready.\n\n\neach API call that adds/deletes/updates a resource (like a listener, pool, member) should wait for the provisioning_status of the LB to be ACTIVE. if the test doesn\u0027t wait, it faces some random \"\u003cresource\u003e is immutable\" issues","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"5aeac951cea0f0a3844290d4b1af20e5c34f494a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"2a5ff7a9_55f6ad48","in_reply_to":"c111f131_bc3cd2e3","updated":"2023-12-18 17:01:23.000000000","message":"Gregory, first thanks for the review!:) \n\nMy opinion is that this is not caused by the patch. And I think it should be addressed in a different patch. \n\nI think that we\u0027re waiting for the load balancer\u0027s provisioning_status to be ACTIVE [1][2][3]. The issue in my opinion is the parallel execution of the tests. It can happen that there are two tests that are performing update","commit_id":"295e4eae85c057976d0a8bd6f0d41b0111f6549b"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"e9c072ae_d75196c7","updated":"2023-12-19 12:44:07.000000000","message":"Thank you Greg for the review!:) I updated the patch and added one question in the comments.","commit_id":"6b00bfe5c9a5de8e9c7eb82053ef8b36659d2ff7"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"f358e2cac610360aac0a988fbdef76ec3bcc2198","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"9d535c4e_2c8e9e5e","updated":"2023-12-20 08:54:34.000000000","message":"recheck\nFailure of octavia-v2-dsvm-tls-barbican not caused by the patch","commit_id":"f42b11750dc67b3b2d34cd86880a1d1a17330d6d"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"91818d567c3a0ee97c17e216cc344e8d39e6607f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"013d315c_469ed670","updated":"2024-01-02 16:36:55.000000000","message":"Great work Lukas, thanks! Except for checking regarding OVN provider \u0026 backup member support (see the comment on the scenario tests) and a few nits, it looks good to me","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"9ca6d1d4_1d185c29","in_reply_to":"013d315c_469ed670","updated":"2024-01-04 15:40:53.000000000","message":"Thank you! Nice catches!:)","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"59ef497f19cea3d8291349c6e26c00aa5c4b9020","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"78959743_9f1a94ad","updated":"2024-01-04 18:53:42.000000000","message":"Looks good to me","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"84ceb0e2_9e6dbf3d","updated":"2024-01-04 15:40:53.000000000","message":"Thanks Arkady and Omer!","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"c502fb44_93e2afa1","updated":"2024-01-11 01:30:54.000000000","message":"This is a partial review, I didn\u0027t review the full scenario tests yet. But I want to post the comments I have.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"c02cce26d13c025b0051473b29d06f366958302b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"c47d8d1f_c9d449ce","updated":"2024-01-08 13:55:07.000000000","message":"recheck check whether timeouts are persistent","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"7e4853ac830b050aeb90c8198ccd8d6a531ce28c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"8a1de28d_5f8ec360","updated":"2024-01-22 13:54:15.000000000","message":"ping reviewers, no review for the last 7 days, please be aware the longer this is gonna be on review, the more context switching is required from both sides (the reviewers as well as the owner)","commit_id":"a3edd0d8166a643b6825539c078c157e84dc90d6"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"8111c754d78f35aff00de1219cc344ac924acee7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"7b6c5631_72f7320e","updated":"2024-04-10 09:23:10.000000000","message":"recheck generate new data","commit_id":"a3edd0d8166a643b6825539c078c157e84dc90d6"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"c2d7eba48c4f3dd6fa96b5c8c43b56f1d5ec5da4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"b0cec823_03ce8666","updated":"2024-04-10 13:07:46.000000000","message":"the feedback came too late (several months late), unfortunately, this isn\u0027t on our radar at the moment and won\u0027t be anytime soon due to other priorities.\nAnyone, feel free to pick this up and continue or abandon.","commit_id":"a3edd0d8166a643b6825539c078c157e84dc90d6"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"60bc456a91dd98b0866059342892f514f1abcb01","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"b6cff87f_9bd6d781","updated":"2024-04-29 10:14:59.000000000","message":"Looks good to me","commit_id":"1e90ece9f7a18d39a200e9b02d877835cbdcfb16"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2f03ea2c69a26f86ed94ff52a0db79bc61ac13a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"8f6255ce_37c6a8af","updated":"2024-05-07 21:46:35.000000000","message":"recheck\ntempest plugin patch removing zed jobs has merged.","commit_id":"1e90ece9f7a18d39a200e9b02d877835cbdcfb16"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9d2bc1c1ecdfdb71b6de23795c072cd7ef303ce2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"e4fd3126_4ea10d70","updated":"2024-04-26 15:09:37.000000000","message":"recheck\nunrelated error: /opt/stack/devstack/functions-common:2345 Neutron did not start","commit_id":"1e90ece9f7a18d39a200e9b02d877835cbdcfb16"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"f9aab16c5a69665e0819f9cad51e9cc8c736fcb6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"5638912b_6325889e","updated":"2024-05-06 08:40:08.000000000","message":"recheck gate failure is not related to the patch","commit_id":"1e90ece9f7a18d39a200e9b02d877835cbdcfb16"}],"octavia_tempest_plugin/tests/api/v2/test_member.py":[{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":true,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"cbf745cd_c0cffabe","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"updated":"2023-11-30 14:58:59.000000000","message":"I\u0027m not exactly sure whether the update test is needed as the _test_member_update already tests switching the backup flag from False to True [1].\n\n[1] https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/18/octavia_tempest_plugin/tests/api/v2/test_member.py#2311","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"6e7bb4a800568012bae5a97b629707a4c6a8eaa9","unresolved":true,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"eb7bce37_4f8e3592","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"in_reply_to":"9dfd852a_0c704a7f","updated":"2023-12-13 18:38:23.000000000","message":"I think it\u0027s fine as is.\nThe point is that we need to have a dedicated test that covers Octavia Update API, I mean \n\n\n@decorators.idempotent_id(\n    def test_HTTP_LC_backup_member_update(self):\n    ...\n    ...\n\n\njust as any other regular test, so it will be listed/executed(individual) with stestr on D/S, reported, logged e.t.c.","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":true,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9dfd852a_0c704a7f","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"in_reply_to":"a322c505_d859e5c6","updated":"2023-12-11 10:51:46.000000000","message":"The _test_member_update function already does this I tink. It updates together with the BACKUP flag also the following values [1]:\n- const.NAME\n- const.ADMIN_STATE_UP\n- const.WEIGHT\n\n[1] https://opendev.org/openstack/octavia-tempest-plugin/src/commit/19b90e927184263d45769aa379534f8aed967b1d/octavia_tempest_plugin/tests/api/v2/test_member.py#L2279","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"0cd01e230bb454572f2c6ab4cc20914abaf7c17f","unresolved":true,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"99e3b0a6_56d8a098","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"in_reply_to":"cbf745cd_c0cffabe","updated":"2023-12-06 09:07:40.000000000","message":"It\u0027s an update validation test, so feel free to update any other member\u0027s parameter from (maybe even combination of few):\n        member_kwargs \u003d {\n            const.NAME: member_name,\n            const.ADMIN_STATE_UP: True,\n            const.POOL_ID: pool_id,\n            const.ADDRESS: member_address,\n            const.PROTOCOL_PORT: self.member_port.increment(),\n            const.WEIGHT: 50,\n        }\nPerhaps when member was created as \"backup\" it fails to update PROTOCOL_PORT for some reason. (potential bug)","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"0cd01e230bb454572f2c6ab4cc20914abaf7c17f","unresolved":true,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a322c505_d859e5c6","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"in_reply_to":"cbf745cd_c0cffabe","updated":"2023-12-06 09:07:40.000000000","message":"Since this is an update test, you can check the update of any other member\u0027s values/keys so you can use any (maybe even combination of few of them) from:\n        member_kwargs \u003d {\n            const.NAME: member_name,\n            const.ADMIN_STATE_UP: True,\n            const.POOL_ID: pool_id,\n            const.ADDRESS: member_address,\n            const.PROTOCOL_PORT: self.member_port.increment(),\n            const.WEIGHT: 50,\n        }\nPerhaps when member was created as backup it fails to update the NAME for some reason, could be potential bug.","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"8d403c129774442ec9ab312331ce5b9c8d6f1cc8","unresolved":false,"context_lines":[{"line_number":1828,"context_line":"                pool_id\u003dpool_id)"},{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1831,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1832,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1833,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1834,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":18,"id":"bbdbab82_90edd17a","line":1831,"range":{"start_line":1831,"start_character":8,"end_line":1831,"end_character":41},"in_reply_to":"eb7bce37_4f8e3592","updated":"2023-12-17 16:59:27.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"0cd01e230bb454572f2c6ab4cc20914abaf7c17f","unresolved":true,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"},{"line_number":147,"context_line":"    def test_ipv4_HTTP_LC_backup_member_create(self):"},{"line_number":148,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":149,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":150,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"},{"line_number":151,"context_line":"        self._test_member_create(4, pool_id, backup_member\u003dTrue)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @decorators.idempotent_id(\u00270684575a-0970-4fa8-8006-10c2b39c5f2b\u0027)"},{"line_number":154,"context_line":"    def test_ipv4_HTTP_LC_alt_monitor_member_create(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"d811c8a4_81e27ba5","line":151,"range":{"start_line":146,"start_character":0,"end_line":151,"end_character":64},"updated":"2023-12-06 09:07:40.000000000","message":"Let\u0027s do the same for IPV6, I mean adding \"test_ipv6_HTTP_LC_backup_member_create\" test.","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"},{"line_number":147,"context_line":"    def test_ipv4_HTTP_LC_backup_member_create(self):"},{"line_number":148,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":149,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":150,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"},{"line_number":151,"context_line":"        self._test_member_create(4, pool_id, backup_member\u003dTrue)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @decorators.idempotent_id(\u00270684575a-0970-4fa8-8006-10c2b39c5f2b\u0027)"},{"line_number":154,"context_line":"    def test_ipv4_HTTP_LC_alt_monitor_member_create(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ee0231c5_42b12701","line":151,"range":{"start_line":146,"start_character":0,"end_line":151,"end_character":64},"in_reply_to":"d811c8a4_81e27ba5","updated":"2023-12-11 10:51:46.000000000","message":"Done","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"6e7bb4a800568012bae5a97b629707a4c6a8eaa9","unresolved":true,"context_lines":[{"line_number":970,"context_line":"        for item in equal_items:"},{"line_number":971,"context_line":"            self.assertEqual(member_kwargs[item], member[item])"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"    @decorators.skip_because(bug\u003d\u00272045803\u0027)"},{"line_number":974,"context_line":"    @decorators.idempotent_id(\u0027b982188a-d55f-438a-a1b2-224f0ec8ff12\u0027)"},{"line_number":975,"context_line":"    def test_HTTP_LC_backup_member_list(self):"},{"line_number":976,"context_line":"        self._test_member_list(const.HTTP,"}],"source_content_type":"text/x-python","patch_set":20,"id":"b18bfa8f_1580039a","line":973,"range":{"start_line":973,"start_character":34,"end_line":973,"end_character":41},"updated":"2023-12-13 18:38:23.000000000","message":"Good catch Lukas!!! 😎 So splitting the tests into API (+ covering Octavia APIs) and Scenario was in place!","commit_id":"ac8b5e5234b224ca6510c49aa858a4ce719222b5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[{"line_number":970,"context_line":"        for item in equal_items:"},{"line_number":971,"context_line":"            self.assertEqual(member_kwargs[item], member[item])"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"    @decorators.skip_because(bug\u003d\u00272045803\u0027)"},{"line_number":974,"context_line":"    @decorators.idempotent_id(\u0027b982188a-d55f-438a-a1b2-224f0ec8ff12\u0027)"},{"line_number":975,"context_line":"    def test_HTTP_LC_backup_member_list(self):"},{"line_number":976,"context_line":"        self._test_member_list(const.HTTP,"}],"source_content_type":"text/x-python","patch_set":20,"id":"026e8c9a_5a6f995c","line":973,"range":{"start_line":973,"start_character":34,"end_line":973,"end_character":41},"in_reply_to":"b18bfa8f_1580039a","updated":"2023-12-19 12:44:07.000000000","message":"thanks!:) Yes, it was in place!","commit_id":"ac8b5e5234b224ca6510c49aa858a4ce719222b5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @testtools.skipIf("},{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"0989033d_43fcadcc","line":147,"updated":"2024-01-11 01:30:54.000000000","message":"We should not do this. The backup members feature is part of the Octavia API and independent of any specific provider driver.\nThe test should handle the \"Not Implemented\" error the provider should return if it doesn\u0027t support this feature. If it gets an option not implemented error, it should skip the test.\nThis way we test that the provider is responding appropriately if it doesn\u0027t implement a feature as well as testing the feature when it is present.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @testtools.skipIf("},{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f9a362b_c3f25a4c","line":147,"in_reply_to":"0989033d_43fcadcc","updated":"2024-01-15 11:57:27.000000000","message":"\u003e  If it gets an option not implemented error, it should skip the test.\n\nI\u0027m not sure whether I\u0027m a huge fan of this solution. Do I understant it correctly that you propose not to skip the test at the beginning of the test but after you obtain \"Not Implemented\" error (?) What information does it provide to the tester? The outcome is that the test is skipped anyway. \n\nMore on skipping tests: https://docs.openstack.org/tempest/latest/HACKING.html#skipping-tests","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"02e2a439f1130a0b74fcf8a34817e19d94429715","unresolved":true,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @testtools.skipIf("},{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"92187092_7feac246","line":147,"in_reply_to":"7f9a362b_c3f25a4c","updated":"2024-04-10 09:53:27.000000000","message":"The benefit of Michael\u0027s suggestion is that it allows to verify that the provider responds with an not implemented error as it should. So the advantage is that the test covers the response of the other providers as well. Also, I think tests should be written in a generic way if possible an not for specific providers.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b180cb8576c64de90b6558ba7dcaa98ff5da9a55","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class MemberAPITest1(MemberAPITest):"},{"line_number":146,"context_line":"    @testtools.skipIf("},{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"6785d178_5acf14c5","line":147,"in_reply_to":"92187092_7feac246","updated":"2024-04-29 08:38:02.000000000","message":"Done","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"},{"line_number":151,"context_line":"    def test_ipv4_HTTP_LC_backup_member_create(self):"},{"line_number":152,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":153,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"}],"source_content_type":"text/x-python","patch_set":28,"id":"d0ea30bd_d5f254f4","line":150,"updated":"2024-01-11 01:30:54.000000000","message":"The later code is checking for API version 2.1 (Line 894).\nWe should do that here and skip the test if the API version is not at least 2.1. As these are currently implemented, the test will pass, but the backup member setting will not be set.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS,"},{"line_number":148,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":149,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":150,"context_line":"    @decorators.idempotent_id(\u0027c1e029b0-b6d6-4fa6-8ccb-5c3f3aa293b0\u0027)"},{"line_number":151,"context_line":"    def test_ipv4_HTTP_LC_backup_member_create(self):"},{"line_number":152,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":153,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"}],"source_content_type":"text/x-python","patch_set":28,"id":"8ce76c19_ebec2f49","line":150,"in_reply_to":"d0ea30bd_d5f254f4","updated":"2024-01-15 11:57:27.000000000","message":"Good point, thank you.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":1381,"context_line":"                    backup_value\u003dconst.BACKUP_TRUE))"},{"line_number":1382,"context_line":"            self.assertEqual(1, len(members))"},{"line_number":1383,"context_line":"            self.assertEqual(member1_name, members[0][const.NAME])"},{"line_number":1384,"context_line":"            self.assertTrue(True, members[0][const.BACKUP])"},{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        # Test combined params"},{"line_number":1387,"context_line":"        members \u003d self.mem_member_client.list_members("}],"source_content_type":"text/x-python","patch_set":28,"id":"79917169_9295e836","line":1384,"updated":"2024-01-11 01:30:54.000000000","message":"This asserting that True is True. I think you want:\nself.assertTrue(members[0][const.BACKUP])\n\nhttps://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"                    backup_value\u003dconst.BACKUP_TRUE))"},{"line_number":1382,"context_line":"            self.assertEqual(1, len(members))"},{"line_number":1383,"context_line":"            self.assertEqual(member1_name, members[0][const.NAME])"},{"line_number":1384,"context_line":"            self.assertTrue(True, members[0][const.BACKUP])"},{"line_number":1385,"context_line":""},{"line_number":1386,"context_line":"        # Test combined params"},{"line_number":1387,"context_line":"        members \u003d self.mem_member_client.list_members("}],"source_content_type":"text/x-python","patch_set":28,"id":"949aa4e5_8ebd78d2","line":1384,"in_reply_to":"79917169_9295e836","updated":"2024-01-15 11:57:27.000000000","message":"Good point, thanks.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":1876,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":1877,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":1878,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1879,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1880,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1881,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1882,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":28,"id":"65b68687_193c6ab5","line":1879,"updated":"2024-01-11 01:30:54.000000000","message":"The way this test code is written, it\u0027s not actually testing changing the backup_member boolean on the update call. It is simply specifying it on create.\nSo, I think this test case is giving a false sense that it is testing a backup member status.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":1876,"context_line":"            \"Backup members tests require provider \u0027amphora\u0027 or \u0027octavia\u0027 \""},{"line_number":1877,"context_line":"            \"(alias to \u0027amphora\u0027, deprecated) set.\")"},{"line_number":1878,"context_line":"    @decorators.idempotent_id(\u0027592c19c3-1e0d-4d6d-b2ff-0d39d8654c99\u0027)"},{"line_number":1879,"context_line":"    def test_HTTP_LC_backup_member_update(self):"},{"line_number":1880,"context_line":"        pool_id \u003d self._listener_pool_create("},{"line_number":1881,"context_line":"            listener_protocol\u003dconst.HTTP, pool_protocol\u003dconst.HTTP,"},{"line_number":1882,"context_line":"            algorithm\u003dconst.LB_ALGORITHM_LEAST_CONNECTIONS)"}],"source_content_type":"text/x-python","patch_set":28,"id":"de567d31_d6ef2704","line":1879,"in_reply_to":"65b68687_193c6ab5","updated":"2024-01-15 11:57:27.000000000","message":"I think I disagree. Maybe I\u0027m misinterpreting something but have you seen this section of the code [1]?\n\n[1] https://opendev.org/openstack/octavia-tempest-plugin/src/commit/19b90e927184263d45769aa379534f8aed967b1d/octavia_tempest_plugin/tests/api/v2/test_member.py#L2285","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"}],"octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 GoDaddy"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"1620a7fe_f624d3f4","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":24},"updated":"2023-10-19 15:53:45.000000000","message":"That should probably be 2023 Red Hat","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"03d257172c74e30d5c5e94d17c8894e2e46f3157","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 GoDaddy"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"06030aaa_eb16d11b","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":24},"in_reply_to":"1620a7fe_f624d3f4","updated":"2023-10-20 08:20:23.000000000","message":"Done","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                     const.NAME: lb_name}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(rm_work): Make this work with ipv6 and split this test for both"},{"line_number":49,"context_line":"        ip_version \u003d 4"},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"156cc2eb_4994a3e6","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":22},"updated":"2023-10-19 15:53:45.000000000","message":"A good question might be - would (should) backup member work with IPv6?\n\n(to other reviewers) Should it be tested with IPv6? Would it worth the overhead?","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                     const.NAME: lb_name}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(rm_work): Make this work with ipv6 and split this test for both"},{"line_number":49,"context_line":"        ip_version \u003d 4"},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"e961719d_33fb21a1","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":22},"in_reply_to":"0724a043_da9fcb28","updated":"2023-11-06 12:01:13.000000000","message":"I updated the tests to work with IPv6. Let me know what you think:)","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                     const.NAME: lb_name}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(rm_work): Make this work with ipv6 and split this test for both"},{"line_number":49,"context_line":"        ip_version \u003d 4"},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"0724a043_da9fcb28","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":22},"in_reply_to":"156cc2eb_4994a3e6","updated":"2023-10-25 16:16:08.000000000","message":"I think that the backup members feature should not be affected by IP version used (it\u0027s transparent) and it should work exactly the same for both.\nSupporting both: IPV4 and IPV6 setups, makes sense to me and if it doesn\u0027t require drastic code changes I would recommend adding this option.\nBTW - there are some lines in the code like L122 or L129 that logs and exports some IPV6 values, but the IPV6 is not in the game as of now.","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"71cfa1b5caae4da42c0c2177ebe08c46e714b315","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                     const.NAME: lb_name}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(rm_work): Make this work with ipv6 and split this test for both"},{"line_number":49,"context_line":"        ip_version \u003d 4"},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8b143cd9_f8c3cd2e","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":22},"in_reply_to":"d39aab47_646162b5","updated":"2023-11-21 13:17:27.000000000","message":"For example, the traffic ops tests are also running the IPv6 and IPv4 tests in the job [1]. I got inspired by those tests so I concluded that it should be ok.\n\nAm I missing something or should we fix this also for the traffic ops tests?\n\nI\u0027m not sure about this but I think that in this case, IP_VERSION is more important than SERVICE_IP_VERSION (?). By default, IP_VERSION is set to 6+4 which means dual-stack openstack [2].\n\nThank you Arkady for looking at this again:). \n\n[1] https://opendev.org/openstack/octavia-tempest-plugin/src/commit/5b2eca40a886ec3fc7c50605925a727247993612/octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py#L61\n[2] https://opendev.org/openstack/devstack/src/commit/bb0c273697bf54dd569ad38e459cd161b62f96cb/lib/neutron_plugins/services/l3#L3","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"a7f54fe78537f3c4734ebda5136108375b653924","unresolved":true,"context_lines":[{"line_number":46,"context_line":"                     const.NAME: lb_name}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # TODO(rm_work): Make this work with ipv6 and split this test for both"},{"line_number":49,"context_line":"        ip_version \u003d 4"},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, ip_version)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d39aab47_646162b5","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":22},"in_reply_to":"e961719d_33fb21a1","updated":"2023-11-21 11:52:49.000000000","message":"Hi Lukas!\n\nWen I\u0027m looking on IPV6 gate [1] and its log [2] I see that the \"backup members\" tests are running twice (BackupMembersTestIPv6,BackupMembersTestIPv4), for example:\n2023-11-09 09:04:48.168484 | controller | {0} octavia_tempest_plugin.tests.scenario.v2.test_backup_members.BackupMembersTestIPv6.test_backup_to_default [6.350633s] ... ok\n2023-11-09 09:04:48.354259 | controller | {1} octavia_tempest_plugin.tests.scenario.v2.test_backup_members.BackupMembersTestIPv4.test_backup_to_default [6.225020s] ... ok\n\n\nIt\u0027s weird, I think that the Devnest used for this gate based on [3] is IPV6 only, so it\u0027s not so clear to me what have been tested for IPV4 😕, anyway we just need to run these tests once, deepening on setup IP version. \n\n\n[1] - https://zuul.opendev.org/t/openstack/build/6ee42b4fab9c4ef5b3e7c4fc2d90b240 \n[2] - https://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_6ee/897564/17/check/octavia-v2-dsvm-scenario-ipv6-only/6ee42b4/job-output.txt\n[3] - https://zuul.opendev.org/t/openstack/build/6ee42b4fab9c4ef5b3e7c4fc2d90b240/log/controller/logs/local_conf.txt#72","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":true,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"},{"line_number":53,"context_line":"        cls.lb_id \u003d lb[const.ID]"},{"line_number":54,"context_line":"        cls.addClassResourceCleanup("},{"line_number":55,"context_line":"            cls.mem_lb_client.cleanup_loadbalancer,"},{"line_number":56,"context_line":"            cls.lb_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if CONF.validation.connect_method \u003d\u003d \u0027floating\u0027:"},{"line_number":59,"context_line":"            port_id \u003d lb[const.VIP_PORT_ID]"}],"source_content_type":"text/x-python","patch_set":6,"id":"d4bbff9b_0083c07a","line":56,"range":{"start_line":54,"start_character":8,"end_line":56,"end_character":22},"updated":"2023-10-19 15:53:45.000000000","message":"You can use the cascade option e.g. \nhttps://opendev.org/openstack/octavia-tempest-plugin/src/branch/master/octavia_tempest_plugin/tests/scenario/v2/test_healthmonitor.py#L48\n\nWhenever a LB has related resources (i.e. children), you cannot delete the LB directly, you will have to delete its related resources first and only then you can delete it. The cascade option does that for you.\n\nSo you won\u0027t need the other (again - LB related resources) cleanups. But you will need the FIP cleanup","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"03d257172c74e30d5c5e94d17c8894e2e46f3157","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        lb \u003d cls.mem_lb_client.create_loadbalancer(**lb_kwargs)"},{"line_number":53,"context_line":"        cls.lb_id \u003d lb[const.ID]"},{"line_number":54,"context_line":"        cls.addClassResourceCleanup("},{"line_number":55,"context_line":"            cls.mem_lb_client.cleanup_loadbalancer,"},{"line_number":56,"context_line":"            cls.lb_id)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if CONF.validation.connect_method \u003d\u003d \u0027floating\u0027:"},{"line_number":59,"context_line":"            port_id \u003d lb[const.VIP_PORT_ID]"}],"source_content_type":"text/x-python","patch_set":6,"id":"67c606f0_9f9288f9","line":56,"range":{"start_line":54,"start_character":8,"end_line":56,"end_character":22},"in_reply_to":"d4bbff9b_0083c07a","updated":"2023-10-20 08:20:23.000000000","message":"+1 this is useful","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":true,"context_lines":[{"line_number":266,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":267,"context_line":"            const.BACKUP: True"},{"line_number":268,"context_line":"        }"},{"line_number":269,"context_line":"        if cls.lb_member_2_subnet:"},{"line_number":270,"context_line":"            member4_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_subnet[const.ID]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        cls.member4 \u003d cls.mem_member_client.create_member("},{"line_number":273,"context_line":"            **member4_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"d2daaded_dd1371fa","line":270,"range":{"start_line":269,"start_character":8,"end_line":270,"end_character":78},"updated":"2023-10-19 15:53:45.000000000","message":"webserver4 is created with cls.lb_member_1_net on line #155-156","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"03d257172c74e30d5c5e94d17c8894e2e46f3157","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":267,"context_line":"            const.BACKUP: True"},{"line_number":268,"context_line":"        }"},{"line_number":269,"context_line":"        if cls.lb_member_2_subnet:"},{"line_number":270,"context_line":"            member4_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_subnet[const.ID]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        cls.member4 \u003d cls.mem_member_client.create_member("},{"line_number":273,"context_line":"            **member4_kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a0c78363_083e777d","line":270,"range":{"start_line":269,"start_character":8,"end_line":270,"end_character":78},"in_reply_to":"d2daaded_dd1371fa","updated":"2023-10-20 08:20:23.000000000","message":"Done, thanks!","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"0ea826cf2e725918009093cf9b10920d550c755c","unresolved":true,"context_lines":[{"line_number":300,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        cls.addClassResourceCleanup("},{"line_number":303,"context_line":"            waiters.wait_for_deleted_status_or_not_found,"},{"line_number":304,"context_line":"            cls.mem_healthmonitor_client.show_healthmonitor,"},{"line_number":305,"context_line":"            hm[const.ID],"},{"line_number":306,"context_line":"            const.PROVISIONING_STATUS,"}],"source_content_type":"text/x-python","patch_set":6,"id":"39879540_e2498f23","line":303,"range":{"start_line":303,"start_character":12,"end_line":303,"end_character":57},"updated":"2023-10-19 15:53:45.000000000","message":"I wonder how that copy paste err didn\u0027t make any problems :)\nAnyway, you can delete both the cls.addClassResourceCleanup on lines 302 \u0026 310 if you use cascade\u003dTrue where I indicated before","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"03d257172c74e30d5c5e94d17c8894e2e46f3157","unresolved":true,"context_lines":[{"line_number":300,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        cls.addClassResourceCleanup("},{"line_number":303,"context_line":"            waiters.wait_for_deleted_status_or_not_found,"},{"line_number":304,"context_line":"            cls.mem_healthmonitor_client.show_healthmonitor,"},{"line_number":305,"context_line":"            hm[const.ID],"},{"line_number":306,"context_line":"            const.PROVISIONING_STATUS,"}],"source_content_type":"text/x-python","patch_set":6,"id":"55a2652b_5f808e18","line":303,"range":{"start_line":303,"start_character":12,"end_line":303,"end_character":57},"in_reply_to":"39879540_e2498f23","updated":"2023-10-20 08:20:23.000000000","message":"I added the cascade option and removed the cleanups, it is better this way!\n\nWhy do you think it should cause problems? I can\u0027t see it straight away now so I\u0027m just curious.","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        cls.addClassResourceCleanup("},{"line_number":303,"context_line":"            waiters.wait_for_deleted_status_or_not_found,"},{"line_number":304,"context_line":"            cls.mem_healthmonitor_client.show_healthmonitor,"},{"line_number":305,"context_line":"            hm[const.ID],"},{"line_number":306,"context_line":"            const.PROVISIONING_STATUS,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7ecc3be1_b2a9cb16","line":303,"range":{"start_line":303,"start_character":12,"end_line":303,"end_character":57},"in_reply_to":"55a2652b_5f808e18","updated":"2023-10-20 10:47:02.000000000","message":"I forgot that you can provide any method as a cleanup method for the test changes.\nas I am used to see usually only the following line provided to cleanups: \ncls.mem_x_client.cleanup_x\n\nso I thought it was a copy paste typo lol...","commit_id":"4664bd127ff0051cc22feb7ba54380e47a700da5"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":true,"context_lines":[{"line_number":241,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":242,"context_line":"            const.BACKUP: True"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        if cls.lb_member_2_subnet:"},{"line_number":245,"context_line":"            member4_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        cls.member4 \u003d cls.mem_member_client.create_member("}],"source_content_type":"text/x-python","patch_set":7,"id":"9a87422d_ca2c9670","line":244,"range":{"start_line":244,"start_character":25,"end_line":244,"end_character":26},"updated":"2023-10-20 10:47:02.000000000","message":"1","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"345274fdb6b4ccb1b11130e686d100ef61eee2d4","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":242,"context_line":"            const.BACKUP: True"},{"line_number":243,"context_line":"        }"},{"line_number":244,"context_line":"        if cls.lb_member_2_subnet:"},{"line_number":245,"context_line":"            member4_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        cls.member4 \u003d cls.mem_member_client.create_member("}],"source_content_type":"text/x-python","patch_set":7,"id":"d23fe6ad_830c825d","line":244,"range":{"start_line":244,"start_character":25,"end_line":244,"end_character":26},"in_reply_to":"9a87422d_ca2c9670","updated":"2023-10-23 09:42:47.000000000","message":"Done","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":true,"context_lines":[{"line_number":304,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":305,"context_line":"    def test_pause_unpause_members(self):"},{"line_number":306,"context_line":"        kwargs_active_default_member \u003d {"},{"line_number":307,"context_line":"                    const.BACKUP: False,"},{"line_number":308,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":309,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":310,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ffc67f6_b51af196","line":307,"range":{"start_line":307,"start_character":20,"end_line":307,"end_character":39},"updated":"2023-10-20 10:47:02.000000000","message":"nit: because you only use that dictionary as an expected member statuses, but you also provide (only) active members, the following\nconst.BACKUP: False\nmight be unnecessary","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"345274fdb6b4ccb1b11130e686d100ef61eee2d4","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":305,"context_line":"    def test_pause_unpause_members(self):"},{"line_number":306,"context_line":"        kwargs_active_default_member \u003d {"},{"line_number":307,"context_line":"                    const.BACKUP: False,"},{"line_number":308,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":309,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":310,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":7,"id":"5663dda0_87696a8f","line":307,"range":{"start_line":307,"start_character":20,"end_line":307,"end_character":39},"in_reply_to":"5ffc67f6_b51af196","updated":"2023-10-23 09:42:47.000000000","message":"Done","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":true,"context_lines":[{"line_number":462,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":463,"context_line":"                }"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        # Remove the backup member flag from the webserver 4"},{"line_number":466,"context_line":"        self.mem_member_client.update_member(self.member4[const.ID],"},{"line_number":467,"context_line":"                                             self.pool_id, backup\u003dFalse)"},{"line_number":468,"context_line":"        waiters.wait_until_true(self.check_member_status,"}],"source_content_type":"text/x-python","patch_set":7,"id":"441e2f56_900330c8","line":465,"updated":"2023-10-20 10:47:02.000000000","message":"I wonder what should happen if we have 2 backup members? Maybe we can test it on this test before removing the backup member flag from webserver4?","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"345274fdb6b4ccb1b11130e686d100ef61eee2d4","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":463,"context_line":"                }"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        # Remove the backup member flag from the webserver 4"},{"line_number":466,"context_line":"        self.mem_member_client.update_member(self.member4[const.ID],"},{"line_number":467,"context_line":"                                             self.pool_id, backup\u003dFalse)"},{"line_number":468,"context_line":"        waiters.wait_until_true(self.check_member_status,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ae110736_8628af9f","line":465,"in_reply_to":"441e2f56_900330c8","updated":"2023-10-23 09:42:47.000000000","message":"Thank you, good idea. I updated the test.","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a7fa7562995ae5248bbaa006d1eefb635778cf60","unresolved":true,"context_lines":[{"line_number":462,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":463,"context_line":"                }"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        # Remove the backup member flag from the webserver 4"},{"line_number":466,"context_line":"        self.mem_member_client.update_member(self.member4[const.ID],"},{"line_number":467,"context_line":"                                             self.pool_id, backup\u003dFalse)"},{"line_number":468,"context_line":"        waiters.wait_until_true(self.check_member_status,"}],"source_content_type":"text/x-python","patch_set":7,"id":"d1a6efdc_4653f4c2","line":465,"in_reply_to":"9d2c4268_ae90d0ce","updated":"2023-10-24 11:21:04.000000000","message":"Oh, I see. Ok, I updated the code. Is it Ok like this?","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"dd19bf3ee134e6e141c3e9a6d183a30b3f1bce31","unresolved":true,"context_lines":[{"line_number":462,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":463,"context_line":"                }"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        # Remove the backup member flag from the webserver 4"},{"line_number":466,"context_line":"        self.mem_member_client.update_member(self.member4[const.ID],"},{"line_number":467,"context_line":"                                             self.pool_id, backup\u003dFalse)"},{"line_number":468,"context_line":"        waiters.wait_until_true(self.check_member_status,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9d2c4268_ae90d0ce","line":465,"in_reply_to":"ae110736_8628af9f","updated":"2023-10-23 13:51:53.000000000","message":"What I meant is, for example - disabling the active members, then we will have 2 backup members. We can then test that the backup members respond to the traffic according to their pool\u0027s lb algorithm, i.e. round robin.","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"f373268f7ec2582e7f22cd2af94fd0e667eb28a5","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":463,"context_line":"                }"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        # Remove the backup member flag from the webserver 4"},{"line_number":466,"context_line":"        self.mem_member_client.update_member(self.member4[const.ID],"},{"line_number":467,"context_line":"                                             self.pool_id, backup\u003dFalse)"},{"line_number":468,"context_line":"        waiters.wait_until_true(self.check_member_status,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1dc71f8f_bf90e823","line":465,"in_reply_to":"d1a6efdc_4653f4c2","updated":"2023-10-24 13:10:07.000000000","message":"yes, this one looks good to me.","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"564a553c38505734c24524c9c155145c8e3a0a24","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        t_waiters.wait_for_server_termination(self.lb_mem_servers_client,"},{"line_number":521,"context_line":"                                              self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        # Pause webserver 1"},{"line_number":524,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":525,"context_line":"                                        self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":526,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":527,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":528,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        # We should get response only from webserver 2 and 3"},{"line_number":531,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":532,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":533,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":534,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":535,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        # Pause webserver 2"},{"line_number":538,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":539,"context_line":"                                        self.lb_member_webserver2[\u0027id\u0027])"},{"line_number":540,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":541,"context_line":"                                         self.lb_member_webserver2[\u0027id\u0027],"},{"line_number":542,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        # We should get response only from webserver 3"},{"line_number":545,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":546,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":547,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"},{"line_number":548,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":549,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        # Pause webserver 3"},{"line_number":552,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":553,"context_line":"                                        self.lb_member_webserver3[\u0027id\u0027])"},{"line_number":554,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":555,"context_line":"                                         self.lb_member_webserver3[\u0027id\u0027],"},{"line_number":556,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        # We should get 503 response"},{"line_number":559,"context_line":"        lb_responses \u003d self.get_active_members(expected_status_code\u003d503)"},{"line_number":560,"context_line":"        for response in list(lb_responses):"},{"line_number":561,"context_line":"            self.assertIn(\"503 Service Unavailable\", response)"}],"source_content_type":"text/x-python","patch_set":7,"id":"cda6d462_1683731e","line":561,"range":{"start_line":523,"start_character":8,"end_line":561,"end_character":62},"updated":"2023-10-20 10:47:02.000000000","message":"IMO you can probe the active members after deleting webserver4 and finish the test. The rest of the scenarios in this test do not test the RFE (again, IMO)","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"345274fdb6b4ccb1b11130e686d100ef61eee2d4","unresolved":true,"context_lines":[{"line_number":520,"context_line":"        t_waiters.wait_for_server_termination(self.lb_mem_servers_client,"},{"line_number":521,"context_line":"                                              self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        # Pause webserver 1"},{"line_number":524,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":525,"context_line":"                                        self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":526,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":527,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":528,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"        # We should get response only from webserver 2 and 3"},{"line_number":531,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":532,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":533,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":534,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":535,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"        # Pause webserver 2"},{"line_number":538,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":539,"context_line":"                                        self.lb_member_webserver2[\u0027id\u0027])"},{"line_number":540,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":541,"context_line":"                                         self.lb_member_webserver2[\u0027id\u0027],"},{"line_number":542,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        # We should get response only from webserver 3"},{"line_number":545,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":546,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":547,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"},{"line_number":548,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":549,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        # Pause webserver 3"},{"line_number":552,"context_line":"        self.lb_mem_servers_client.pause_server("},{"line_number":553,"context_line":"                                        self.lb_member_webserver3[\u0027id\u0027])"},{"line_number":554,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":555,"context_line":"                                         self.lb_member_webserver3[\u0027id\u0027],"},{"line_number":556,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"        # We should get 503 response"},{"line_number":559,"context_line":"        lb_responses \u003d self.get_active_members(expected_status_code\u003d503)"},{"line_number":560,"context_line":"        for response in list(lb_responses):"},{"line_number":561,"context_line":"            self.assertIn(\"503 Service Unavailable\", response)"}],"source_content_type":"text/x-python","patch_set":7,"id":"62e85ff8_1c3b8e35","line":561,"range":{"start_line":523,"start_character":8,"end_line":561,"end_character":62},"in_reply_to":"cda6d462_1683731e","updated":"2023-10-23 09:42:47.000000000","message":"I\u0027m not sure here whether I agree or disagree. I\u0027ll wait for other\u0027s opinions and if more people agree, I\u0027ll remove it.","commit_id":"82f664b3b769975dc35310762304f5086bef641a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        cls.member1 \u003d cls.mem_member_client.create_member("},{"line_number":185,"context_line":"            **member1_kwargs)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        waiters.wait_for_status("},{"line_number":188,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":189,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fb6ad159_ed8862d7","line":186,"updated":"2023-10-25 16:16:08.000000000","message":"We probably need a cleanup here, I mean:\ncls.addClassResourceCleanup(cls.mem_member_client.cleanup_member,....\nRelevant for all the rest:1,2,3 and 4","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        cls.member1 \u003d cls.mem_member_client.create_member("},{"line_number":185,"context_line":"            **member1_kwargs)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        waiters.wait_for_status("},{"line_number":188,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":189,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":11,"id":"2cfa950f_6ca2b250","line":186,"in_reply_to":"ac46b85b_f6e9d348","updated":"2023-11-28 14:13:50.000000000","message":"Done","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        cls.member1 \u003d cls.mem_member_client.create_member("},{"line_number":185,"context_line":"            **member1_kwargs)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        waiters.wait_for_status("},{"line_number":188,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":189,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ac46b85b_f6e9d348","line":186,"in_reply_to":"fb6ad159_ed8862d7","updated":"2023-11-06 12:01:13.000000000","message":"We probably do not need to add cleanup here because we use cascade\u003dTrue option in the cleanup_loadbalancer function (https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/11/octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py#56)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":271,"context_line":"            const.ACTIVE,"},{"line_number":272,"context_line":"            CONF.load_balancer.build_interval,"},{"line_number":273,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def check_member_status(self, show_member, pool_id, member_id, **kwargs):"},{"line_number":276,"context_line":"        response \u003d show_member(member_id, pool_id)"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"c17f2897_a003094b","line":274,"updated":"2023-10-25 16:16:08.000000000","message":"Missing cleanup for \"hm\" created?","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            const.ACTIVE,"},{"line_number":272,"context_line":"            CONF.load_balancer.build_interval,"},{"line_number":273,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def check_member_status(self, show_member, pool_id, member_id, **kwargs):"},{"line_number":276,"context_line":"        response \u003d show_member(member_id, pool_id)"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"e420990f_48391de3","line":274,"in_reply_to":"16136c41_0ba8b71f","updated":"2023-11-28 14:13:50.000000000","message":"Done","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":271,"context_line":"            const.ACTIVE,"},{"line_number":272,"context_line":"            CONF.load_balancer.build_interval,"},{"line_number":273,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def check_member_status(self, show_member, pool_id, member_id, **kwargs):"},{"line_number":276,"context_line":"        response \u003d show_member(member_id, pool_id)"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"16136c41_0ba8b71f","line":274,"in_reply_to":"c17f2897_a003094b","updated":"2023-11-06 12:01:13.000000000","message":"We probably do not need to add cleanup here because we use cascade\u003dTrue option in the cleanup_loadbalancer function (https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/897564/11/octavia_tempest_plugin/tests/scenario/v2/test_backup_members.py#56)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":272,"context_line":"            CONF.load_balancer.build_interval,"},{"line_number":273,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def check_member_status(self, show_member, pool_id, member_id, **kwargs):"},{"line_number":276,"context_line":"        response \u003d show_member(member_id, pool_id)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        for key in kwargs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"066f3d56_102bd919","line":275,"range":{"start_line":275,"start_character":8,"end_line":275,"end_character":27},"updated":"2023-10-25 16:16:08.000000000","message":"There is a concept to name helper function like this to start with underscore, it means: _check_member_status","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            CONF.load_balancer.build_interval,"},{"line_number":273,"context_line":"            CONF.load_balancer.build_timeout)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def check_member_status(self, show_member, pool_id, member_id, **kwargs):"},{"line_number":276,"context_line":"        response \u003d show_member(member_id, pool_id)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        for key in kwargs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"2c2612cf_04782557","line":275,"range":{"start_line":275,"start_character":8,"end_line":275,"end_character":27},"in_reply_to":"066f3d56_102bd919","updated":"2023-11-06 12:01:13.000000000","message":"Done:).","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        return True"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def get_active_members(self, num_queries\u003d10, expected_status_code\u003d200):"},{"line_number":285,"context_line":"        lb_responses \u003d set()"},{"line_number":286,"context_line":"        URL \u003d f\u0027http://{self.lb_vip_address}\u0027"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"4c038827_25c3ff0b","line":284,"range":{"start_line":284,"start_character":8,"end_line":284,"end_character":26},"updated":"2023-10-25 16:16:08.000000000","message":"Same as in L274\n+ \nIt\u0027s about getting HTTP response from member, therefore renaming to \"_get_active_members_response\" will be more accurate I think.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        return True"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def get_active_members(self, num_queries\u003d10, expected_status_code\u003d200):"},{"line_number":285,"context_line":"        lb_responses \u003d set()"},{"line_number":286,"context_line":"        URL \u003d f\u0027http://{self.lb_vip_address}\u0027"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bfd9fa60_e8634cd4","line":284,"range":{"start_line":284,"start_character":8,"end_line":284,"end_character":26},"in_reply_to":"4c038827_25c3ff0b","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def get_active_members(self, num_queries\u003d10, expected_status_code\u003d200):"},{"line_number":285,"context_line":"        lb_responses \u003d set()"},{"line_number":286,"context_line":"        URL \u003d f\u0027http://{self.lb_vip_address}\u0027"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        for _ in range(num_queries):"},{"line_number":289,"context_line":"            lb_response \u003d self.validate_URL_response(URL, expected_status_code)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fd1ae090_13e3c80f","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":45},"updated":"2023-10-25 16:16:08.000000000","message":"I think that we need to include a port to create this URL here, to make it work always. Means that the URL needs to have a port taken from listener_kwargs L82.\nFor example, if someone will change listener port from 80 to 85 this L85 this URL won\u0027t be valid anymore as it assumes that the default 80 is used.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def get_active_members(self, num_queries\u003d10, expected_status_code\u003d200):"},{"line_number":285,"context_line":"        lb_responses \u003d set()"},{"line_number":286,"context_line":"        URL \u003d f\u0027http://{self.lb_vip_address}\u0027"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        for _ in range(num_queries):"},{"line_number":289,"context_line":"            lb_response \u003d self.validate_URL_response(URL, expected_status_code)"}],"source_content_type":"text/x-python","patch_set":11,"id":"251a0737_0b3f94fe","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":45},"in_reply_to":"fd1ae090_13e3c80f","updated":"2023-11-06 12:01:13.000000000","message":"Done","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":295,"context_line":"class BackupMembersTest(BackupMembersTestBase):"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @decorators.idempotent_id(\u00273c95a158-be21-4444-a210-3064eed6a5f3\u0027)"},{"line_number":298,"context_line":"    def test_create_backup_member(self):"},{"line_number":299,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":300,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":301,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":302,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":303,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":306,"context_line":"    def test_pause_unpause_members(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"08b51e29_9e098987","line":303,"range":{"start_line":298,"start_character":0,"end_line":303,"end_character":69},"updated":"2023-10-26 14:23:32.000000000","message":"1) This test creates nothing, I mean no backup member is actually created within this code. Backup member(4) was created in L2448.\nHere we check the \"initial state\" of the stuff that have been created in resource setup: 1,2,3 are in loop and 4 is not.\nI would expect the \"test_create_backup_member\" logic to be something like:\n1) Create backup member, wait till ACTIVE\n2) Ensure that the \"backup\u0027 flag is actually set to False (using show_member)\n3) Check that no traffic is received from this member (as it\u0027s backup) when you send HTTP GETs to LB. (something you\u0027ve done in L297)\n\n2) I\u0027m personally prefer to use \"msg\" in all the assertions that supports this option, for example this one does:\nassertIn(member, container, msg\u003dNone)\nThese messages are really helpful when test fails and for debugging as well.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":295,"context_line":"class BackupMembersTest(BackupMembersTestBase):"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @decorators.idempotent_id(\u00273c95a158-be21-4444-a210-3064eed6a5f3\u0027)"},{"line_number":298,"context_line":"    def test_create_backup_member(self):"},{"line_number":299,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":300,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":301,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":302,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":303,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":306,"context_line":"    def test_pause_unpause_members(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"32bd3f76_91dc4121","line":303,"range":{"start_line":298,"start_character":0,"end_line":303,"end_character":69},"in_reply_to":"08b51e29_9e098987","updated":"2023-11-06 12:01:13.000000000","message":"Maybe I could rename the test? I think it is useful to have it. It is simple smoke test. I added the show_member() to check whether the members have to correct flags.\n\nI\u0027m not sure whether it is good idea to create a new backup member inside the test: 1) it takes a lot of time and 2) I\u0027m not sure what would be the added value of this as the resources are created in the resource_setup -- the creation has been tested in some way, in the test we just check whether the backup member was created successfully. But if you think that I should add it here I will do so:).","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[{"line_number":295,"context_line":"class BackupMembersTest(BackupMembersTestBase):"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @decorators.idempotent_id(\u00273c95a158-be21-4444-a210-3064eed6a5f3\u0027)"},{"line_number":298,"context_line":"    def test_create_backup_member(self):"},{"line_number":299,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":300,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":301,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":302,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":303,"context_line":"        self.assertNotIn(str(self.webserver4_response), lb_responses)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":306,"context_line":"    def test_pause_unpause_members(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ce0ce7f5_a3ef02e8","line":303,"range":{"start_line":298,"start_character":0,"end_line":303,"end_character":69},"in_reply_to":"32bd3f76_91dc4121","updated":"2023-12-19 12:44:07.000000000","message":"I think we can close this thread:). We have the API tests now and the scenario test we talk about here is probably a good smoke test. We can open it again if someone disagrees.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":306,"context_line":"    def test_pause_unpause_members(self):"},{"line_number":307,"context_line":"        kwargs_active_member \u003d {"},{"line_number":308,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":309,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":310,"context_line":"                }"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        # Pause webserver 1"},{"line_number":313,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"1b1fbf0a_2de9f596","line":310,"range":{"start_line":307,"start_character":0,"end_line":310,"end_character":17},"updated":"2023-10-26 14:23:32.000000000","message":"I think that it\u0027s worth to include \"backup\" flag here (like in L413), it means: if active then \"backup:False\" and to validate that it still set properly.\nPerhaps some member have decided to become \"backup\" after unpause or something.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @decorators.idempotent_id(\u0027b310f00f-8219-48fc-86ac-9feb4ee5b1c8\u0027)"},{"line_number":306,"context_line":"    def test_pause_unpause_members(self):"},{"line_number":307,"context_line":"        kwargs_active_member \u003d {"},{"line_number":308,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":309,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":310,"context_line":"                }"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        # Pause webserver 1"},{"line_number":313,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"b36899e6_286933ec","line":310,"range":{"start_line":307,"start_character":0,"end_line":310,"end_character":17},"in_reply_to":"1b1fbf0a_2de9f596","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":314,"context_line":"                                        self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":315,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":316,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":317,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # We should get response only from webserver 2 and 3"},{"line_number":320,"context_line":"        lb_responses \u003d self.get_active_members()"}],"source_content_type":"text/x-python","patch_set":11,"id":"d11b576f_075b8ea1","line":317,"range":{"start_line":317,"start_character":42,"end_line":317,"end_character":48},"updated":"2023-10-25 16:16:08.000000000","message":"Nit\nConsider adding \"PAUSED\" to constants.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                                        self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":315,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":316,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":317,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        # We should get response only from webserver 2 and 3"},{"line_number":320,"context_line":"        lb_responses \u003d self.get_active_members()"}],"source_content_type":"text/x-python","patch_set":11,"id":"f4fdde1b_879c5677","line":317,"range":{"start_line":317,"start_character":42,"end_line":317,"end_character":48},"in_reply_to":"d11b576f_075b8ea1","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":330,"context_line":"                                         self.lb_member_webserver2[\u0027id\u0027],"},{"line_number":331,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # We should get response only from webserver 2"},{"line_number":334,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":335,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":336,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"33738465_14df6f92","line":333,"updated":"2023-10-26 14:23:32.000000000","message":"3?","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                                         self.lb_member_webserver2[\u0027id\u0027],"},{"line_number":331,"context_line":"                                         \u0027PAUSED\u0027)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # We should get response only from webserver 2"},{"line_number":334,"context_line":"        lb_responses \u003d self.get_active_members()"},{"line_number":335,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":336,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":11,"id":"64d21151_68092010","line":333,"in_reply_to":"33738465_14df6f92","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":356,"context_line":"                                          self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":357,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":358,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":359,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":360,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":361,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":362,"context_line":"                                pool_id\u003dself.pool_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"05edf8bb_98d165f8","line":359,"range":{"start_line":359,"start_character":42,"end_line":359,"end_character":48},"updated":"2023-10-25 16:16:08.000000000","message":"You can use already existing \"ACTIVE\" from constants.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                          self.lb_member_webserver1[\u0027id\u0027])"},{"line_number":357,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":358,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":359,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":360,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":361,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":362,"context_line":"                                pool_id\u003dself.pool_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"69a77231_5f509755","line":359,"range":{"start_line":359,"start_character":42,"end_line":359,"end_character":48},"in_reply_to":"05edf8bb_98d165f8","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"af235bca3249269dd9712875b007dc0d03029407","unresolved":true,"context_lines":[{"line_number":357,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":358,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":359,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":360,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":361,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":362,"context_line":"                                pool_id\u003dself.pool_id,"},{"line_number":363,"context_line":"                                member_id\u003dself.member1[const.ID],"}],"source_content_type":"text/x-python","patch_set":11,"id":"26d18114_5a2e5471","line":360,"range":{"start_line":360,"start_character":16,"end_line":360,"end_character":31},"updated":"2023-10-25 16:16:08.000000000","message":"The default timeout is set to 60, but I think that in terms of these kind of tests (backup should happen as fast as possible) we have to reduce it, maybe 10 sec?\nI\u0027d suggest asking Dev for proper timeout value to be used here.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":357,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":358,"context_line":"                                         self.lb_member_webserver1[\u0027id\u0027],"},{"line_number":359,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":360,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":361,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":362,"context_line":"                                pool_id\u003dself.pool_id,"},{"line_number":363,"context_line":"                                member_id\u003dself.member1[const.ID],"}],"source_content_type":"text/x-python","patch_set":11,"id":"1d995b7b_a979606a","line":360,"range":{"start_line":360,"start_character":16,"end_line":360,"end_character":31},"in_reply_to":"26d18114_5a2e5471","updated":"2023-11-06 12:01:13.000000000","message":"If I remember correctly I encountered once an issue when the timeout was shorter than 60 seconds. But I would not put my hand into fire for that. It was in the early stages of writing this test so it might have been caused by something else. I\u0027ll ask someone from the dev:).","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":394,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":395,"context_line":"                                         self.lb_member_webserver3[\u0027id\u0027],"},{"line_number":396,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":397,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":398,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":399,"context_line":"                                pool_id\u003dself.pool_id,"},{"line_number":400,"context_line":"                                member_id\u003dself.member3[const.ID],"}],"source_content_type":"text/x-python","patch_set":11,"id":"4cbc9774_86e1324b","line":397,"updated":"2023-10-26 14:23:32.000000000","message":"Nit\nThis comment: \"# Unpause webserver3\" is missing, it helps to read the code.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        t_waiters.wait_for_server_status(self.lb_mem_servers_client,"},{"line_number":395,"context_line":"                                         self.lb_member_webserver3[\u0027id\u0027],"},{"line_number":396,"context_line":"                                         \u0027ACTIVE\u0027)"},{"line_number":397,"context_line":"        waiters.wait_until_true(self.check_member_status,"},{"line_number":398,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":399,"context_line":"                                pool_id\u003dself.pool_id,"},{"line_number":400,"context_line":"                                member_id\u003dself.member3[const.ID],"}],"source_content_type":"text/x-python","patch_set":11,"id":"1fa66d7c_a7f117a4","line":397,"in_reply_to":"4cbc9774_86e1324b","updated":"2023-11-06 12:01:13.000000000","message":"Done:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":438,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":441,"context_line":"                        self.check_member_status,"},{"line_number":442,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":443,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":444,"context_line":"                        member_id\u003dself.member4[const.ID],"},{"line_number":445,"context_line":"                        **kwargs_active_backup_member)"},{"line_number":446,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":447,"context_line":"                        self.member4[const.ID],"},{"line_number":448,"context_line":"                        self.pool_id,"},{"line_number":449,"context_line":"                        backup\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    @decorators.idempotent_id(\u0027b616d16c-0629-414b-88d7-85f14e407828\u0027)"},{"line_number":452,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5fa53ad0_f645f534","line":449,"range":{"start_line":440,"start_character":0,"end_line":449,"end_character":36},"updated":"2023-10-26 14:23:32.000000000","message":"I\u0027m not sure that \"addCleanup\" is in place here, you just have to wait and set what is needed without adding to cleanup.\nCleanup are used to delete resources created on teardown.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"},{"line_number":438,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":441,"context_line":"                        self.check_member_status,"},{"line_number":442,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":443,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":444,"context_line":"                        member_id\u003dself.member4[const.ID],"},{"line_number":445,"context_line":"                        **kwargs_active_backup_member)"},{"line_number":446,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":447,"context_line":"                        self.member4[const.ID],"},{"line_number":448,"context_line":"                        self.pool_id,"},{"line_number":449,"context_line":"                        backup\u003dTrue)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    @decorators.idempotent_id(\u0027b616d16c-0629-414b-88d7-85f14e407828\u0027)"},{"line_number":452,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"2b6ae8dd_ff3d1d64","line":449,"range":{"start_line":440,"start_character":0,"end_line":449,"end_character":36},"in_reply_to":"5fa53ad0_f645f534","updated":"2023-11-06 12:01:13.000000000","message":"Done","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":531,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":532,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":533,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":536,"context_line":"                        self.check_member_status,"},{"line_number":537,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":538,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":539,"context_line":"                        member_id\u003dself.member4[const.ID],"},{"line_number":540,"context_line":"                        **kwargs_active_backup_member)"},{"line_number":541,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":542,"context_line":"                        self.member4[const.ID],"},{"line_number":543,"context_line":"                        self.pool_id,"},{"line_number":544,"context_line":"                        backup\u003dTrue)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":547,"context_line":"                        self.check_member_status,"},{"line_number":548,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":549,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":550,"context_line":"                        member_id\u003dself.member3[const.ID],"},{"line_number":551,"context_line":"                        **kwargs_active_default_member)"},{"line_number":552,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":553,"context_line":"                        self.member3[const.ID],"},{"line_number":554,"context_line":"                        self.pool_id,"},{"line_number":555,"context_line":"                        backup\u003dFalse)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"class BackupMembersDelete(BackupMembersTestBase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"66c39da6_949789d8","line":555,"range":{"start_line":534,"start_character":0,"end_line":555,"end_character":37},"updated":"2023-10-26 14:23:32.000000000","message":"Same as in L440","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":532,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":533,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":536,"context_line":"                        self.check_member_status,"},{"line_number":537,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":538,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":539,"context_line":"                        member_id\u003dself.member4[const.ID],"},{"line_number":540,"context_line":"                        **kwargs_active_backup_member)"},{"line_number":541,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":542,"context_line":"                        self.member4[const.ID],"},{"line_number":543,"context_line":"                        self.pool_id,"},{"line_number":544,"context_line":"                        backup\u003dTrue)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        self.addCleanup(waiters.wait_until_true,"},{"line_number":547,"context_line":"                        self.check_member_status,"},{"line_number":548,"context_line":"                        show_member\u003dself.mem_member_client.show_member,"},{"line_number":549,"context_line":"                        pool_id\u003dself.pool_id,"},{"line_number":550,"context_line":"                        member_id\u003dself.member3[const.ID],"},{"line_number":551,"context_line":"                        **kwargs_active_default_member)"},{"line_number":552,"context_line":"        self.addCleanup(self.mem_member_client.update_member,"},{"line_number":553,"context_line":"                        self.member3[const.ID],"},{"line_number":554,"context_line":"                        self.pool_id,"},{"line_number":555,"context_line":"                        backup\u003dFalse)"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"class BackupMembersDelete(BackupMembersTestBase):"}],"source_content_type":"text/x-python","patch_set":11,"id":"f5adb49b_1d4792c5","line":555,"range":{"start_line":534,"start_character":0,"end_line":555,"end_character":37},"in_reply_to":"66c39da6_949789d8","updated":"2023-11-06 12:01:13.000000000","message":"Done","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"91bd16be33d5f8dc88781705194dbc1475408bcb","unresolved":true,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    @decorators.idempotent_id(\u00274283a8ff-6cd3-4882-9e64-950cfbbed7e3\u0027)"},{"line_number":561,"context_line":"    def test_delete_backup(self):"},{"line_number":562,"context_line":"        # Delete webserver 4"},{"line_number":563,"context_line":"        self.lb_mem_servers_client.delete_server("},{"line_number":564,"context_line":"                                         self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":565,"context_line":"        t_waiters.wait_for_server_termination(self.lb_mem_servers_client,"},{"line_number":566,"context_line":"                                              self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        # Pause webserver 1"},{"line_number":569,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"d4616c94_cc5c9816","line":566,"range":{"start_line":562,"start_character":0,"end_line":566,"end_character":78},"updated":"2023-10-26 14:23:32.000000000","message":"I think that such a deletion (of server4 that is used in BackupMembersTest class) may cause to problems on parallel execution. It could be that the tests in BackupMembersTest won\u0027t have server4 available.","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    @decorators.idempotent_id(\u00274283a8ff-6cd3-4882-9e64-950cfbbed7e3\u0027)"},{"line_number":561,"context_line":"    def test_delete_backup(self):"},{"line_number":562,"context_line":"        # Delete webserver 4"},{"line_number":563,"context_line":"        self.lb_mem_servers_client.delete_server("},{"line_number":564,"context_line":"                                         self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":565,"context_line":"        t_waiters.wait_for_server_termination(self.lb_mem_servers_client,"},{"line_number":566,"context_line":"                                              self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        # Pause webserver 1"},{"line_number":569,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"c4adb3f8_3594a858","line":566,"range":{"start_line":562,"start_character":0,"end_line":566,"end_character":78},"in_reply_to":"38ab0c9f_3167e3b1","updated":"2023-12-19 12:44:07.000000000","message":"This should be resolved as well:)","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":559,"context_line":""},{"line_number":560,"context_line":"    @decorators.idempotent_id(\u00274283a8ff-6cd3-4882-9e64-950cfbbed7e3\u0027)"},{"line_number":561,"context_line":"    def test_delete_backup(self):"},{"line_number":562,"context_line":"        # Delete webserver 4"},{"line_number":563,"context_line":"        self.lb_mem_servers_client.delete_server("},{"line_number":564,"context_line":"                                         self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":565,"context_line":"        t_waiters.wait_for_server_termination(self.lb_mem_servers_client,"},{"line_number":566,"context_line":"                                              self.lb_member_webserver4[\u0027id\u0027])"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        # Pause webserver 1"},{"line_number":569,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"38ab0c9f_3167e3b1","line":566,"range":{"start_line":562,"start_character":0,"end_line":566,"end_character":78},"in_reply_to":"d4616c94_cc5c9816","updated":"2023-11-06 12:01:13.000000000","message":"It should not cause a problem because the test is running in a separate class, thus with different resources. The BackupMembersDelete class should be executing only test_delete_backup test (I hope:).","commit_id":"ca24bc3e8d170ab9148a002dde8bdd1e3754249e"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"92a79ea25e2f36b4ff0df9ba1750df77648626df","unresolved":true,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # We should receive response from all server except for webserver 3"},{"line_number":595,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":596,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":597,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":598,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":599,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a7a82a61_1476a4a7","line":596,"updated":"2023-11-06 12:01:13.000000000","message":"Sometimes I get : \u00271\u0027 not in {\u00274\u0027} error. This needs to be resolved.","commit_id":"4d17d8b8c90aaa6d863d1590b0a69cd43612e615"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # We should receive response from all server except for webserver 3"},{"line_number":595,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":596,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":597,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":598,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":599,"context_line":"        self.assertIn(str(self.webserver4_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":13,"id":"220855ef_902cdf43","line":596,"in_reply_to":"a7a82a61_1476a4a7","updated":"2023-12-19 12:44:07.000000000","message":"Resolved","commit_id":"4d17d8b8c90aaa6d863d1590b0a69cd43612e615"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        super(BackupMembersTestBase, cls).resource_setup()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Create network and IP"},{"line_number":46,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb1_backup_member\")"},{"line_number":47,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":48,"context_line":"                     const.NAME: lb_name}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"f2369ff6_4fcc1034","line":46,"range":{"start_line":46,"start_character":52,"end_line":46,"end_character":53},"updated":"2023-11-28 14:13:50.000000000","message":"Nit\n\nThere is only one single LB used in the tests, so I think that indexing with \"1\" is not necessary.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(BackupMembersTestBase, cls).resource_setup()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Create network and IP"},{"line_number":46,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb1_backup_member\")"},{"line_number":47,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":48,"context_line":"                     const.NAME: lb_name}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"2774d801_9de20f3e","line":46,"range":{"start_line":46,"start_character":52,"end_line":46,"end_character":53},"in_reply_to":"f2369ff6_4fcc1034","updated":"2023-11-30 14:58:59.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                                CONF.load_balancer.lb_build_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Create listener"},{"line_number":82,"context_line":"        listener_name \u003d data_utils.rand_name(\"listener1_backup_member\")"},{"line_number":83,"context_line":"        cls.listener_kwargs \u003d {"},{"line_number":84,"context_line":"            const.NAME: listener_name,"},{"line_number":85,"context_line":"            const.PROTOCOL: const.HTTP,"}],"source_content_type":"text/x-python","patch_set":17,"id":"014baacf_29ea2188","line":82,"range":{"start_line":82,"start_character":54,"end_line":82,"end_character":55},"updated":"2023-11-28 14:13:50.000000000","message":"Same as in L46","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                CONF.load_balancer.lb_build_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Create listener"},{"line_number":82,"context_line":"        listener_name \u003d data_utils.rand_name(\"listener1_backup_member\")"},{"line_number":83,"context_line":"        cls.listener_kwargs \u003d {"},{"line_number":84,"context_line":"            const.NAME: listener_name,"},{"line_number":85,"context_line":"            const.PROTOCOL: const.HTTP,"}],"source_content_type":"text/x-python","patch_set":17,"id":"35911bf8_c88b3140","line":82,"range":{"start_line":82,"start_character":54,"end_line":82,"end_character":55},"in_reply_to":"014baacf_29ea2188","updated":"2023-11-30 14:58:59.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":96,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Create pool"},{"line_number":99,"context_line":"        pool_name \u003d data_utils.rand_name(\"lb_member_pool1_backup_member\")"},{"line_number":100,"context_line":"        pool_kwargs \u003d {"},{"line_number":101,"context_line":"            const.NAME: pool_name,"},{"line_number":102,"context_line":"            const.PROTOCOL: const.HTTP,"}],"source_content_type":"text/x-python","patch_set":17,"id":"e9869552_8c3ace3f","line":99,"range":{"start_line":99,"start_character":56,"end_line":99,"end_character":57},"updated":"2023-11-28 14:13:50.000000000","message":"Same as in L46","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        # Create pool"},{"line_number":99,"context_line":"        pool_name \u003d data_utils.rand_name(\"lb_member_pool1_backup_member\")"},{"line_number":100,"context_line":"        pool_kwargs \u003d {"},{"line_number":101,"context_line":"            const.NAME: pool_name,"},{"line_number":102,"context_line":"            const.PROTOCOL: const.HTTP,"}],"source_content_type":"text/x-python","patch_set":17,"id":"55108dbb_a399eb54","line":99,"range":{"start_line":99,"start_character":56,"end_line":99,"end_character":57},"in_reply_to":"e9869552_8c3ace3f","updated":"2023-11-30 14:58:59.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":209,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":210,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # Set up Member 3 for Webserver 3"},{"line_number":213,"context_line":"        member3_name \u003d data_utils.rand_name(\"lb_member_member3_backup_members\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if cls.ip_version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":17,"id":"c77ef37f_92b96886","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":41},"updated":"2023-11-28 14:13:50.000000000","message":"Nit\nThis one is \"backup\" (L226), so it\u0027s worth mentioning this in comment.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":210,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # Set up Member 3 for Webserver 3"},{"line_number":213,"context_line":"        member3_name \u003d data_utils.rand_name(\"lb_member_member3_backup_members\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if cls.ip_version \u003d\u003d 4:"}],"source_content_type":"text/x-python","patch_set":17,"id":"c529bee3_b37ea037","line":212,"range":{"start_line":212,"start_character":0,"end_line":212,"end_character":41},"in_reply_to":"c77ef37f_92b96886","updated":"2023-11-30 14:58:59.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        return True"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def _get_active_members_response(self, num_queries\u003d10,"},{"line_number":269,"context_line":"                                     expected_status_code\u003d200):"},{"line_number":270,"context_line":"        lb_responses \u003d set()"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"213c5c17_eafbc6e5","line":268,"range":{"start_line":268,"start_character":55,"end_line":268,"end_character":57},"updated":"2023-11-28 14:13:50.000000000","message":"Nit\nUsually setting hardcoded values like here are less appreciated.\nConsider using \"build_interval\" instead.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":true,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        return True"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def _get_active_members_response(self, num_queries\u003d10,"},{"line_number":269,"context_line":"                                     expected_status_code\u003d200):"},{"line_number":270,"context_line":"        lb_responses \u003d set()"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f1dedef_391ddbd2","line":268,"range":{"start_line":268,"start_character":55,"end_line":268,"end_character":57},"in_reply_to":"213c5c17_eafbc6e5","updated":"2023-11-30 14:58:59.000000000","message":"The definition for build interval is:\n\"time in seconds between build status checks for \u0027non-load-balancer resources to build\" Therefore I\u0027m not sure whether we can use it here.\n\nFor example, the assertConsistentResponse function in octavia_tempest_plugin uses a similar approach (hardcoding the number of retries) [1].\n\nBut I agree that hardcoding the values is not a good approach. Should I introduce a new config option for this? I could not find any relevant existing config option in config.py for octavia_tempest_plugin.\n\n[1] https://opendev.org/openstack/octavia-tempest-plugin/src/commit/5b2eca40a886ec3fc7c50605925a727247993612/octavia_tempest_plugin/tests/validators.py#L323","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"8d403c129774442ec9ab312331ce5b9c8d6f1cc8","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        return True"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def _get_active_members_response(self, num_queries\u003d10,"},{"line_number":269,"context_line":"                                     expected_status_code\u003d200):"},{"line_number":270,"context_line":"        lb_responses \u003d set()"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"820e8551_1736333f","line":268,"range":{"start_line":268,"start_character":55,"end_line":268,"end_character":57},"in_reply_to":"9f1dedef_391ddbd2","updated":"2023-12-17 16:59:27.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return lb_responses"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _test_create_backup_member(self):"},{"line_number":286,"context_line":"        member1 \u003d self.mem_member_client.show_member(self.member1[const.ID],"},{"line_number":287,"context_line":"                                                     self.pool_id)"},{"line_number":288,"context_line":"        member2 \u003d self.mem_member_client.show_member(self.member2[const.ID],"}],"source_content_type":"text/x-python","patch_set":17,"id":"c402d883_86c27cfa","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":34},"updated":"2023-11-28 14:13:50.000000000","message":"I think that we need to make some code changes here to keep the API\u0026Scenario logic :-( \n\nAs of now, if I\u0027m not mistaken it doesn\u0027t seem like we have API tests (CRUD) implemented for backup members therefore I think that we need to add them. \nSo we\u0027ll have:\n1) \"create\" API test to verify the creation (BACKUP:True + ACTIVE)\n2) \"create\" Scenario test will be traffic based to ensure that if 1,2 are OK no traffic is received from 3.\n\nNote: this function verifies members that have been created in resource setup (it creates nothing) and verifies both API and Scenario logic, that is why we have to make an order here and to split the tests to API and Scenario.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return lb_responses"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _test_create_backup_member(self):"},{"line_number":286,"context_line":"        member1 \u003d self.mem_member_client.show_member(self.member1[const.ID],"},{"line_number":287,"context_line":"                                                     self.pool_id)"},{"line_number":288,"context_line":"        member2 \u003d self.mem_member_client.show_member(self.member2[const.ID],"}],"source_content_type":"text/x-python","patch_set":17,"id":"9de619ca_ba94f91b","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":34},"in_reply_to":"48eae27e_9da3e47a","updated":"2023-12-14 15:32:41.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":true,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        return lb_responses"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _test_create_backup_member(self):"},{"line_number":286,"context_line":"        member1 \u003d self.mem_member_client.show_member(self.member1[const.ID],"},{"line_number":287,"context_line":"                                                     self.pool_id)"},{"line_number":288,"context_line":"        member2 \u003d self.mem_member_client.show_member(self.member2[const.ID],"}],"source_content_type":"text/x-python","patch_set":17,"id":"48eae27e_9da3e47a","line":285,"range":{"start_line":285,"start_character":8,"end_line":285,"end_character":34},"in_reply_to":"c402d883_86c27cfa","updated":"2023-11-30 14:58:59.000000000","message":"I added the API tests. Let me know what you think:).","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":290,"context_line":"        member3 \u003d self.mem_member_client.show_member(self.member3[const.ID],"},{"line_number":291,"context_line":"                                                     self.pool_id)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        # Check that only member 4 has the backup flag"},{"line_number":294,"context_line":"        self.assertEqual(member1[const.BACKUP], False)"},{"line_number":295,"context_line":"        self.assertEqual(member2[const.BACKUP], False)"},{"line_number":296,"context_line":"        self.assertEqual(member3[const.BACKUP], True)"}],"source_content_type":"text/x-python","patch_set":17,"id":"82ed8898_36d58225","line":293,"range":{"start_line":293,"start_character":33,"end_line":293,"end_character":34},"updated":"2023-11-28 14:13:50.000000000","message":"Form the previous patchset I guess, this one is supposed to be 3.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        member3 \u003d self.mem_member_client.show_member(self.member3[const.ID],"},{"line_number":291,"context_line":"                                                     self.pool_id)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        # Check that only member 4 has the backup flag"},{"line_number":294,"context_line":"        self.assertEqual(member1[const.BACKUP], False)"},{"line_number":295,"context_line":"        self.assertEqual(member2[const.BACKUP], False)"},{"line_number":296,"context_line":"        self.assertEqual(member3[const.BACKUP], True)"}],"source_content_type":"text/x-python","patch_set":17,"id":"dda33fde_a062af5e","line":293,"range":{"start_line":293,"start_character":33,"end_line":293,"end_character":34},"in_reply_to":"82ed8898_36d58225","updated":"2023-11-30 14:58:59.000000000","message":"Done","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":556,"context_line":""},{"line_number":557,"context_line":"class BackupMembersTestIPv4(BackupMembersTestBase):"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    ip_version \u003d 4"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":562,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"a64edd99_eea698e5","line":559,"range":{"start_line":559,"start_character":0,"end_line":559,"end_character":18},"updated":"2023-11-28 14:13:50.000000000","message":"Do we need it here?\nThis static variable defined in L31 fits the needs of IPV4 test, so we don\u0027t have to override 4 by 4.","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":556,"context_line":""},{"line_number":557,"context_line":"class BackupMembersTestIPv4(BackupMembersTestBase):"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    ip_version \u003d 4"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":562,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"acd28a33_728bd374","line":559,"range":{"start_line":559,"start_character":0,"end_line":559,"end_character":18},"in_reply_to":"a64edd99_eea698e5","updated":"2023-11-30 14:58:59.000000000","message":"No, it is not necessary but in this case, I wanted to stick with: \"Explicit is better than implicit.\".","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"90b2d3c94c20a18716cd191d77600358b1bf2187","unresolved":true,"context_lines":[{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class BackupMembersDeleteIPv4(BackupMembersTestBase):"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    ip_version \u003d 4"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    @decorators.idempotent_id(\u00279e05aeaa-1d39-439c-9346-b4f3c2247092\u0027)"},{"line_number":610,"context_line":"    def test_delete_backup(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"449c58c7_b97843ba","line":607,"range":{"start_line":607,"start_character":0,"end_line":607,"end_character":18},"updated":"2023-11-28 14:13:50.000000000","message":"Same as in L559","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"61dea23d58ff799b78899cddb6daf0e709c90386","unresolved":false,"context_lines":[{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class BackupMembersDeleteIPv4(BackupMembersTestBase):"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    ip_version \u003d 4"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    @decorators.idempotent_id(\u00279e05aeaa-1d39-439c-9346-b4f3c2247092\u0027)"},{"line_number":610,"context_line":"    def test_delete_backup(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"8b076664_e9f15e4d","line":607,"range":{"start_line":607,"start_character":0,"end_line":607,"end_character":18},"in_reply_to":"449c58c7_b97843ba","updated":"2023-11-30 14:58:59.000000000","message":"No, it is not necessary but in this case, I wanted to stick with: \"Explicit is better than implicit.\".","commit_id":"a0def7f97e98338a4c8bb9e8d185bf62c9f2d4d0"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":true,"context_lines":[{"line_number":283,"context_line":"        return lb_responses"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _test_backup_member(self):"},{"line_number":286,"context_line":"        # Check that we only receive response from default members (1,2,3)"},{"line_number":287,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":288,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":289,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"58f45934_a6b7f149","line":286,"updated":"2023-12-14 15:32:41.000000000","message":"Nit\n\"3\" is backup, so (1 and 2) instead of (1,2,3)","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        return lb_responses"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _test_backup_member(self):"},{"line_number":286,"context_line":"        # Check that we only receive response from default members (1,2,3)"},{"line_number":287,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":288,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":289,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"de209a6a_60d211b4","line":286,"in_reply_to":"58f45934_a6b7f149","updated":"2023-12-15 09:59:30.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":true,"context_lines":[{"line_number":296,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":297,"context_line":"                }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":300,"context_line":"                    const.BACKUP: False,"},{"line_number":301,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":302,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":303,"context_line":"                }"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":306,"context_line":"                    const.BACKUP: False,"},{"line_number":307,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":308,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":309,"context_line":"                }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        # Pause webserver 1"},{"line_number":312,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":18,"id":"c1934822_708b6b8c","line":309,"range":{"start_line":299,"start_character":0,"end_line":309,"end_character":17},"updated":"2023-12-14 15:32:41.000000000","message":"Duplicated lines","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":297,"context_line":"                }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":300,"context_line":"                    const.BACKUP: False,"},{"line_number":301,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":302,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":303,"context_line":"                }"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":306,"context_line":"                    const.BACKUP: False,"},{"line_number":307,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":308,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":309,"context_line":"                }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        # Pause webserver 1"},{"line_number":312,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":18,"id":"c954922d_0a04a4a8","line":309,"range":{"start_line":299,"start_character":0,"end_line":309,"end_character":17},"in_reply_to":"c1934822_708b6b8c","updated":"2023-12-15 09:59:30.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":true,"context_lines":[{"line_number":402,"context_line":"                                member_id\u003dself.member3[const.ID],"},{"line_number":403,"context_line":"                                **kwargs_active_default_member)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # We should get reponse from all the server in the pool (1, 2, 3 and 4)"},{"line_number":406,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":407,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":408,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"079fee27_e5e68533","line":405,"range":{"start_line":405,"start_character":64,"end_line":405,"end_character":79},"updated":"2023-12-14 15:32:41.000000000","message":"(1, 2, 3 and 4) -\u003e (1, 2 and 3)","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                                member_id\u003dself.member3[const.ID],"},{"line_number":403,"context_line":"                                **kwargs_active_default_member)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        # We should get reponse from all the server in the pool (1, 2, 3 and 4)"},{"line_number":406,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":407,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":408,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"62de2878_eae2d18d","line":405,"range":{"start_line":405,"start_character":64,"end_line":405,"end_character":79},"in_reply_to":"079fee27_e5e68533","updated":"2023-12-15 09:59:30.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":true,"context_lines":[{"line_number":457,"context_line":"                                member_id\u003dself.member1[const.ID],"},{"line_number":458,"context_line":"                                **kwargs_error_default_member)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        # We should get reponse from the backup members: 3, 4"},{"line_number":461,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":462,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":463,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"d9c9a273_a5a0bf33","line":460,"range":{"start_line":460,"start_character":57,"end_line":460,"end_character":61},"updated":"2023-12-14 15:32:41.000000000","message":"3, 4 -\u003e 2, 3","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                                member_id\u003dself.member1[const.ID],"},{"line_number":458,"context_line":"                                **kwargs_error_default_member)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        # We should get reponse from the backup members: 3, 4"},{"line_number":461,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":462,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":463,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"8bfb3f28_42d5c3fa","line":460,"range":{"start_line":460,"start_character":57,"end_line":460,"end_character":61},"in_reply_to":"d9c9a273_a5a0bf33","updated":"2023-12-15 09:59:30.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"acc0bd8cb50cb2ec1bb75263bfd3ac634d726d8c","unresolved":true,"context_lines":[{"line_number":484,"context_line":"                                member_id\u003dself.member3[const.ID],"},{"line_number":485,"context_line":"                                **kwargs_active_default_member)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # We should receive response from all server except for webserver 2"},{"line_number":488,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":489,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":490,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1c2d6256_73fb4e1c","line":487,"range":{"start_line":487,"start_character":41,"end_line":487,"end_character":52},"updated":"2023-12-14 15:32:41.000000000","message":"all servers -\u003e 1,3","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"837b78e3e2fd4aefc7473c8d57ef1e6260e663cd","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                                member_id\u003dself.member3[const.ID],"},{"line_number":485,"context_line":"                                **kwargs_active_default_member)"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # We should receive response from all server except for webserver 2"},{"line_number":488,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":489,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":490,"context_line":"        self.assertNotIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":18,"id":"574ab7f4_c04f4ad1","line":487,"range":{"start_line":487,"start_character":41,"end_line":487,"end_character":52},"in_reply_to":"1c2d6256_73fb4e1c","updated":"2023-12-15 09:59:30.000000000","message":"Done","commit_id":"9d15ed9466ecbadf37ef3473f3834974e7b7ee8a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f655f229a00a28029d8a9c1535e816cf99dba10a","unresolved":true,"context_lines":[{"line_number":56,"context_line":"            cls.lb_id, cascade\u003dTrue)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if (CONF.validation.connect_method \u003d\u003d \u0027floating\u0027 and"},{"line_number":59,"context_line":"           cls.ip_version \u003d\u003d 4):"},{"line_number":60,"context_line":"            port_id \u003d lb[const.VIP_PORT_ID]"},{"line_number":61,"context_line":"            result \u003d cls.lb_mem_float_ip_client.create_floatingip("},{"line_number":62,"context_line":"                floating_network_id\u003dCONF.network.public_network_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"0bd03297_d8351375","line":59,"updated":"2023-12-05 17:04:59.000000000","message":"Indentation. It should be indented one level further (5 additional spaces).","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"27e06e48ee41576023910d7c92bd7d2401990f59","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            cls.lb_id, cascade\u003dTrue)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if (CONF.validation.connect_method \u003d\u003d \u0027floating\u0027 and"},{"line_number":59,"context_line":"           cls.ip_version \u003d\u003d 4):"},{"line_number":60,"context_line":"            port_id \u003d lb[const.VIP_PORT_ID]"},{"line_number":61,"context_line":"            result \u003d cls.lb_mem_float_ip_client.create_floatingip("},{"line_number":62,"context_line":"                floating_network_id\u003dCONF.network.public_network_id,"}],"source_content_type":"text/x-python","patch_set":19,"id":"186c55ba_b442e060","line":59,"in_reply_to":"0bd03297_d8351375","updated":"2023-12-19 12:44:07.000000000","message":"Done","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f655f229a00a28029d8a9c1535e816cf99dba10a","unresolved":true,"context_lines":[{"line_number":151,"context_line":"        cls._validate_webserver(cls.webserver3_public_ip,"},{"line_number":152,"context_line":"                                cls.webserver3_response)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Set up Member 1 for Webserver 1"},{"line_number":155,"context_line":"        member1_name \u003d data_utils.rand_name(\"lb_member_member1_backup_members\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":158,"context_line":"            webserver1_ip \u003d cls.webserver1_ip"},{"line_number":159,"context_line":"        else:"},{"line_number":160,"context_line":"            webserver1_ip \u003d cls.webserver1_ipv6"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        m_1_kwargs \u003d {"},{"line_number":163,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":164,"context_line":"            const.NAME: member1_name,"},{"line_number":165,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":166,"context_line":"            const.ADDRESS: webserver1_ip,"},{"line_number":167,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":168,"context_line":"        }"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":171,"context_line":"            m_1_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            m_1_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_ipv6_subnet[const.ID]"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        cls.member1 \u003d cls.mem_member_client.create_member(**m_1_kwargs)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        waiters.wait_for_status("},{"line_number":178,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":179,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":180,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":181,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # Set up Member 2 for Webserver 2"},{"line_number":184,"context_line":"        member2_name \u003d data_utils.rand_name(\"lb_member_member2_backup_members\")"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":187,"context_line":"            webserver2_ip \u003d cls.webserver2_ip"},{"line_number":188,"context_line":"        else:"},{"line_number":189,"context_line":"            webserver2_ip \u003d cls.webserver2_ipv6"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        m_2_kwargs \u003d {"},{"line_number":192,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":193,"context_line":"            const.NAME: member2_name,"},{"line_number":194,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":195,"context_line":"            const.ADDRESS: webserver2_ip,"},{"line_number":196,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":197,"context_line":"        }"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":200,"context_line":"            m_2_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_subnet[const.ID]"},{"line_number":201,"context_line":"        else:"},{"line_number":202,"context_line":"            m_2_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_ipv6_subnet[const.ID]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        cls.member2 \u003d cls.mem_member_client.create_member(**m_2_kwargs)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        waiters.wait_for_status("},{"line_number":207,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":208,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":209,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":210,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # Set up Member 3 for Webserver 3 (backup member)"},{"line_number":213,"context_line":"        member3_name \u003d data_utils.rand_name(\"lb_member_member3_backup_members\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":216,"context_line":"            webserver3_ip \u003d cls.webserver3_ip"},{"line_number":217,"context_line":"        else:"},{"line_number":218,"context_line":"            webserver3_ip \u003d cls.webserver3_ipv6"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        m_3_kwargs \u003d {"},{"line_number":221,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":222,"context_line":"            const.NAME: member3_name,"},{"line_number":223,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":224,"context_line":"            const.ADDRESS: webserver3_ip,"},{"line_number":225,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":226,"context_line":"            const.BACKUP: True"},{"line_number":227,"context_line":"        }"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":230,"context_line":"            m_3_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":231,"context_line":"        else:"},{"line_number":232,"context_line":"            m_3_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_ipv6_subnet[const.ID]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        cls.member3 \u003d cls.mem_member_client.create_member(**m_3_kwargs)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        waiters.wait_for_status("},{"line_number":237,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":238,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":239,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":240,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        # Create healthmonitor"},{"line_number":243,"context_line":"        hm \u003d cls.mem_healthmonitor_client.create_healthmonitor(**{"}],"source_content_type":"text/x-python","patch_set":19,"id":"3b18d0b3_0016a6d0","line":240,"range":{"start_line":154,"start_character":0,"end_line":240,"end_character":45},"updated":"2023-12-05 17:04:59.000000000","message":"Why not create a separate function for that in order to avoid code duplication?","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        cls._validate_webserver(cls.webserver3_public_ip,"},{"line_number":152,"context_line":"                                cls.webserver3_response)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Set up Member 1 for Webserver 1"},{"line_number":155,"context_line":"        member1_name \u003d data_utils.rand_name(\"lb_member_member1_backup_members\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":158,"context_line":"            webserver1_ip \u003d cls.webserver1_ip"},{"line_number":159,"context_line":"        else:"},{"line_number":160,"context_line":"            webserver1_ip \u003d cls.webserver1_ipv6"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        m_1_kwargs \u003d {"},{"line_number":163,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":164,"context_line":"            const.NAME: member1_name,"},{"line_number":165,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":166,"context_line":"            const.ADDRESS: webserver1_ip,"},{"line_number":167,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":168,"context_line":"        }"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":171,"context_line":"            m_1_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            m_1_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_ipv6_subnet[const.ID]"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        cls.member1 \u003d cls.mem_member_client.create_member(**m_1_kwargs)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        waiters.wait_for_status("},{"line_number":178,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":179,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":180,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":181,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # Set up Member 2 for Webserver 2"},{"line_number":184,"context_line":"        member2_name \u003d data_utils.rand_name(\"lb_member_member2_backup_members\")"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":187,"context_line":"            webserver2_ip \u003d cls.webserver2_ip"},{"line_number":188,"context_line":"        else:"},{"line_number":189,"context_line":"            webserver2_ip \u003d cls.webserver2_ipv6"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        m_2_kwargs \u003d {"},{"line_number":192,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":193,"context_line":"            const.NAME: member2_name,"},{"line_number":194,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":195,"context_line":"            const.ADDRESS: webserver2_ip,"},{"line_number":196,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":197,"context_line":"        }"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":200,"context_line":"            m_2_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_subnet[const.ID]"},{"line_number":201,"context_line":"        else:"},{"line_number":202,"context_line":"            m_2_kwargs[const.SUBNET_ID] \u003d cls.lb_member_2_ipv6_subnet[const.ID]"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        cls.member2 \u003d cls.mem_member_client.create_member(**m_2_kwargs)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        waiters.wait_for_status("},{"line_number":207,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":208,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":209,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":210,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # Set up Member 3 for Webserver 3 (backup member)"},{"line_number":213,"context_line":"        member3_name \u003d data_utils.rand_name(\"lb_member_member3_backup_members\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":216,"context_line":"            webserver3_ip \u003d cls.webserver3_ip"},{"line_number":217,"context_line":"        else:"},{"line_number":218,"context_line":"            webserver3_ip \u003d cls.webserver3_ipv6"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        m_3_kwargs \u003d {"},{"line_number":221,"context_line":"            const.POOL_ID: cls.pool_id,"},{"line_number":222,"context_line":"            const.NAME: member3_name,"},{"line_number":223,"context_line":"            const.ADMIN_STATE_UP: True,"},{"line_number":224,"context_line":"            const.ADDRESS: webserver3_ip,"},{"line_number":225,"context_line":"            const.PROTOCOL_PORT: 80,"},{"line_number":226,"context_line":"            const.BACKUP: True"},{"line_number":227,"context_line":"        }"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        if cls.ip_version \u003d\u003d 4:"},{"line_number":230,"context_line":"            m_3_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_subnet[const.ID]"},{"line_number":231,"context_line":"        else:"},{"line_number":232,"context_line":"            m_3_kwargs[const.SUBNET_ID] \u003d cls.lb_member_1_ipv6_subnet[const.ID]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        cls.member3 \u003d cls.mem_member_client.create_member(**m_3_kwargs)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        waiters.wait_for_status("},{"line_number":237,"context_line":"            cls.mem_lb_client.show_loadbalancer, cls.lb_id,"},{"line_number":238,"context_line":"            const.PROVISIONING_STATUS, const.ACTIVE,"},{"line_number":239,"context_line":"            CONF.load_balancer.check_interval,"},{"line_number":240,"context_line":"            CONF.load_balancer.check_timeout)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        # Create healthmonitor"},{"line_number":243,"context_line":"        hm \u003d cls.mem_healthmonitor_client.create_healthmonitor(**{"}],"source_content_type":"text/x-python","patch_set":19,"id":"837baf79_9c1fb443","line":240,"range":{"start_line":154,"start_character":0,"end_line":240,"end_character":45},"in_reply_to":"3b18d0b3_0016a6d0","updated":"2023-12-11 10:51:46.000000000","message":"Done","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f655f229a00a28029d8a9c1535e816cf99dba10a","unresolved":true,"context_lines":[{"line_number":289,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":290,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def _test_pause_unpause_members(self):"},{"line_number":293,"context_line":"        kwargs_active_member \u003d {"},{"line_number":294,"context_line":"                    const.BACKUP: False,"},{"line_number":295,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":19,"id":"b7547700_eeca1c8f","line":292,"range":{"start_line":292,"start_character":8,"end_line":292,"end_character":41},"updated":"2023-12-05 17:04:59.000000000","message":"It would help if you describe the starting conditions (servers 1,2 not backup, server 3 backup) and the test scenario in the docstring.","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":290,"context_line":"        self.assertNotIn(str(self.webserver3_response), lb_responses)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def _test_pause_unpause_members(self):"},{"line_number":293,"context_line":"        kwargs_active_member \u003d {"},{"line_number":294,"context_line":"                    const.BACKUP: False,"},{"line_number":295,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":19,"id":"514875af_3a1595ad","line":292,"range":{"start_line":292,"start_character":8,"end_line":292,"end_character":41},"in_reply_to":"b7547700_eeca1c8f","updated":"2023-12-11 10:51:46.000000000","message":"Done:)","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f655f229a00a28029d8a9c1535e816cf99dba10a","unresolved":true,"context_lines":[{"line_number":296,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":297,"context_line":"                }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":300,"context_line":"                    const.BACKUP: False,"},{"line_number":301,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":302,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":303,"context_line":"                }"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":306,"context_line":"                    const.BACKUP: False,"},{"line_number":307,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":308,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":309,"context_line":"                }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        # Pause webserver 1"},{"line_number":312,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":19,"id":"697a4076_a2182bf0","line":309,"range":{"start_line":299,"start_character":0,"end_line":309,"end_character":17},"updated":"2023-12-05 17:04:59.000000000","message":"code duplicate","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86b858049d95e035f1fbb431f167b354747a61c4","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                    const.OPERATING_STATUS: const.ONLINE"},{"line_number":297,"context_line":"                }"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":300,"context_line":"                    const.BACKUP: False,"},{"line_number":301,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":302,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":303,"context_line":"                }"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        kwargs_error_default_member \u003d {"},{"line_number":306,"context_line":"                    const.BACKUP: False,"},{"line_number":307,"context_line":"                    const.PROVISIONING_STATUS: const.ACTIVE,"},{"line_number":308,"context_line":"                    const.OPERATING_STATUS: const.ERROR"},{"line_number":309,"context_line":"                }"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        # Pause webserver 1"},{"line_number":312,"context_line":"        self.lb_mem_servers_client.pause_server("}],"source_content_type":"text/x-python","patch_set":19,"id":"25030ea5_46aa9b09","line":309,"range":{"start_line":299,"start_character":0,"end_line":309,"end_character":17},"in_reply_to":"697a4076_a2182bf0","updated":"2023-12-11 10:51:46.000000000","message":"Done","commit_id":"2aac667cdd6ee84d15fcea8fdc9be8eff8ff1dea"}],"octavia_tempest_plugin/tests/scenario/v2/test_backup_members_traffic_ops.py":[{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"368ffc3324b0a8178da5f4629f80aa0126cc2204","unresolved":true,"context_lines":[{"line_number":446,"context_line":"        # Make webserver 2 the new backup member"},{"line_number":447,"context_line":"        self.mem_member_client.update_member(self.member2[const.ID],"},{"line_number":448,"context_line":"                                             self.pool_id, backup\u003dTrue)"},{"line_number":449,"context_line":"        waiters.wait_for_status(self.mem_lb_client.show_loadbalancer,"},{"line_number":450,"context_line":"                                self.lb_id, const.PROVISIONING_STATUS,"},{"line_number":451,"context_line":"                                const.ACTIVE,"},{"line_number":452,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":453,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":454,"context_line":"        waiters.wait_until_true(self._check_member_status,"},{"line_number":455,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":456,"context_line":"                                pool_id\u003dself.pool_id,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ed747f59_a3d943b3","line":453,"range":{"start_line":449,"start_character":0,"end_line":453,"end_character":65},"updated":"2023-12-21 12:12:13.000000000","message":"Any reason for checking LB status first?\nI think that in case when LB will be in ERROR status (and one of the reasons could be that the member feels bad) we won\u0027t get this info, therefore I think this order needs to be changed.\nFirst we have to check that the member got into appropriate status and after this check another waiter for LB should come. \nIt\u0027s the same comment for other places in code.","commit_id":"f42b11750dc67b3b2d34cd86880a1d1a17330d6d"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        # Make webserver 2 the new backup member"},{"line_number":447,"context_line":"        self.mem_member_client.update_member(self.member2[const.ID],"},{"line_number":448,"context_line":"                                             self.pool_id, backup\u003dTrue)"},{"line_number":449,"context_line":"        waiters.wait_for_status(self.mem_lb_client.show_loadbalancer,"},{"line_number":450,"context_line":"                                self.lb_id, const.PROVISIONING_STATUS,"},{"line_number":451,"context_line":"                                const.ACTIVE,"},{"line_number":452,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":453,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":454,"context_line":"        waiters.wait_until_true(self._check_member_status,"},{"line_number":455,"context_line":"                                show_member\u003dself.mem_member_client.show_member,"},{"line_number":456,"context_line":"                                pool_id\u003dself.pool_id,"}],"source_content_type":"text/x-python","patch_set":25,"id":"750329d6_2cd70e2e","line":453,"range":{"start_line":449,"start_character":0,"end_line":453,"end_character":65},"in_reply_to":"ed747f59_a3d943b3","updated":"2024-01-04 15:40:53.000000000","message":"Hi Arkady:), no particular reason for this order. I got inspired by the rest of the code. For example in the API member tests they do the waiting the same way as I did (waiting for loadbalancer first and then for the member) [1]. But I think you\u0027ve got a point here. I updated the code.\n\n[1] https://opendev.org/openstack/octavia-tempest-plugin/src/commit/19b90e927184263d45769aa379534f8aed967b1d/octavia_tempest_plugin/tests/api/v2/test_member.py#L919","commit_id":"f42b11750dc67b3b2d34cd86880a1d1a17330d6d"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"91818d567c3a0ee97c17e216cc344e8d39e6607f","unresolved":true,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Create network and IP"},{"line_number":46,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb_backup_member\")"},{"line_number":47,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":48,"context_line":"                     const.NAME: lb_name}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, cls.ip_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"6ea5d081_496be7b6","line":47,"range":{"start_line":47,"start_character":21,"end_line":47,"end_character":64},"updated":"2024-01-02 16:36:55.000000000","message":"It looks like backup member is not supported with OVN provider today https://docs.openstack.org/octavia/2023.2/user/feature-classification/index.html\nMaybe we should change it to amphora provider (only)","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        # Create network and IP"},{"line_number":46,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb_backup_member\")"},{"line_number":47,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":48,"context_line":"                     const.NAME: lb_name}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        cls._setup_lb_network_kwargs(lb_kwargs, cls.ip_version)"}],"source_content_type":"text/x-python","patch_set":26,"id":"18b32915_f81190e8","line":47,"range":{"start_line":47,"start_character":21,"end_line":47,"end_character":64},"in_reply_to":"6ea5d081_496be7b6","updated":"2024-01-04 15:40:53.000000000","message":"Done","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"91818d567c3a0ee97c17e216cc344e8d39e6607f","unresolved":true,"context_lines":[{"line_number":393,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":394,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        # We should get reponse from all servers in the pool (1, 2, 3)"},{"line_number":397,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":398,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":399,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"5ebc9fb3_beab2557","line":396,"range":{"start_line":396,"start_character":24,"end_line":396,"end_character":31},"updated":"2024-01-02 16:36:55.000000000","message":"nit: typo: response","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":394,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        # We should get reponse from all servers in the pool (1, 2, 3)"},{"line_number":397,"context_line":"        lb_responses \u003d self._get_active_members_response()"},{"line_number":398,"context_line":"        self.assertIn(str(self.webserver1_response), lb_responses)"},{"line_number":399,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fc75ceb8_2bfbb9dd","line":396,"range":{"start_line":396,"start_character":24,"end_line":396,"end_character":31},"in_reply_to":"5ebc9fb3_beab2557","updated":"2024-01-04 15:40:53.000000000","message":"Done","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"91818d567c3a0ee97c17e216cc344e8d39e6607f","unresolved":true,"context_lines":[{"line_number":469,"context_line":"                                member_id\u003dself.member1[const.ID],"},{"line_number":470,"context_line":"                                **kwargs_error_default_member)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        # We should get reponse from the backup members: 2, 3"},{"line_number":473,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":474,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":475,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"f60e3dff_751a8a7e","line":472,"range":{"start_line":472,"start_character":24,"end_line":472,"end_character":31},"updated":"2024-01-02 16:36:55.000000000","message":"nit: typo: response","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                                member_id\u003dself.member1[const.ID],"},{"line_number":470,"context_line":"                                **kwargs_error_default_member)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        # We should get reponse from the backup members: 2, 3"},{"line_number":473,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":474,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":475,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"03f04160_604d4b47","line":472,"range":{"start_line":472,"start_character":24,"end_line":472,"end_character":31},"in_reply_to":"f60e3dff_751a8a7e","updated":"2024-01-04 15:40:53.000000000","message":"Done","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"91818d567c3a0ee97c17e216cc344e8d39e6607f","unresolved":true,"context_lines":[{"line_number":470,"context_line":"                                **kwargs_error_default_member)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        # We should get reponse from the backup members: 2, 3"},{"line_number":473,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":474,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":475,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":476,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"b6040aeb_3abcf76d","line":473,"range":{"start_line":473,"start_character":57,"end_line":473,"end_character":70},"updated":"2024-01-02 16:36:55.000000000","message":"Just from curiosity, is there a reason why we explicitly define here num_queries\u003d2? (If we define more than 2, would member1 respond too?)","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"a04ea05eb49a518a1f56c086800c4b6f37d82e60","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                                **kwargs_error_default_member)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        # We should get reponse from the backup members: 2, 3"},{"line_number":473,"context_line":"        lb_responses \u003d self._get_active_members_response(num_queries\u003d2)"},{"line_number":474,"context_line":"        self.assertNotIn(str(self.webserver1_response), lb_responses)"},{"line_number":475,"context_line":"        self.assertIn(str(self.webserver2_response), lb_responses)"},{"line_number":476,"context_line":"        self.assertIn(str(self.webserver3_response), lb_responses)"}],"source_content_type":"text/x-python","patch_set":26,"id":"6c516419_d07543e3","line":473,"range":{"start_line":473,"start_character":57,"end_line":473,"end_character":70},"in_reply_to":"b6040aeb_3abcf76d","updated":"2024-01-04 15:40:53.000000000","message":"Honestly, I do not remember now what was the reason to but num_queries\u003d2 there. But I think without it it would be better.","commit_id":"e8146a1a3c0a96e6cff28f8142fbb63bc8188111"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":37,"context_line":"            raise cls.skipException(\u0027Traffic tests will not work without \u0027"},{"line_number":38,"context_line":"                                    \u0027run_validation enabled.\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        if CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS:"},{"line_number":41,"context_line":"            raise cls.skipException(\"Backup members tests require provider \""},{"line_number":42,"context_line":"                                    \"\u0027amphora\u0027 or \u0027octavia\u0027 (alias to \""},{"line_number":43,"context_line":"                                    \"\u0027amphora\u0027, deprecated) set.\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"d9763a42_66393d4c","line":40,"updated":"2024-01-11 01:30:54.000000000","message":"Same comment here as on the API tests, we do not want to do this.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":37,"context_line":"            raise cls.skipException(\u0027Traffic tests will not work without \u0027"},{"line_number":38,"context_line":"                                    \u0027run_validation enabled.\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        if CONF.load_balancer.provider not in const.AMPHORA_PROVIDERS:"},{"line_number":41,"context_line":"            raise cls.skipException(\"Backup members tests require provider \""},{"line_number":42,"context_line":"                                    \"\u0027amphora\u0027 or \u0027octavia\u0027 (alias to \""},{"line_number":43,"context_line":"                                    \"\u0027amphora\u0027, deprecated) set.\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"5165368f_65ecf5a0","line":40,"in_reply_to":"d9763a42_66393d4c","updated":"2024-01-15 11:57:27.000000000","message":"I\u0027m not sure whether I\u0027m on the same page when it comes to skipping of the tests. Same comment as with the API tests.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        super(BackupMembersTestBase, cls).resource_setup()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Create network and IP"},{"line_number":51,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb_backup_member\")"},{"line_number":52,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":53,"context_line":"                     const.NAME: lb_name}"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"908d93ee_6a1541e2","line":51,"updated":"2024-01-11 01:30:54.000000000","message":"nit: This seems a bit redundant, lb_backup_member is probably good enough","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(BackupMembersTestBase, cls).resource_setup()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # Create network and IP"},{"line_number":51,"context_line":"        lb_name \u003d data_utils.rand_name(\"lb_member_lb_backup_member\")"},{"line_number":52,"context_line":"        lb_kwargs \u003d {const.PROVIDER: CONF.load_balancer.provider,"},{"line_number":53,"context_line":"                     const.NAME: lb_name}"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"65ff5d37_bf8f45da","line":51,"in_reply_to":"908d93ee_6a1541e2","updated":"2024-01-15 11:57:27.000000000","message":"Done","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":118,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create webservers 3 as webservers 1 and 2 are created in"},{"line_number":121,"context_line":"        # the parent class."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Create webserver 3"}],"source_content_type":"text/x-python","patch_set":28,"id":"d5499355_4c559b05","line":120,"updated":"2024-01-11 01:30:54.000000000","message":"Do we really need a third web server? It seems like we can test this feature with just the two used for all of the tests.\n\nI am asking because each web server takes more resources from the test host, specifically it uses more memory on the test host which is VERY limited on the gate test hosts. It is very likely that having a third instance will increase the swap usage, which significantly slows down the test runs.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":118,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create webservers 3 as webservers 1 and 2 are created in"},{"line_number":121,"context_line":"        # the parent class."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Create webserver 3"}],"source_content_type":"text/x-python","patch_set":28,"id":"19983577_5ec62d81","line":120,"in_reply_to":"d5499355_4c559b05","updated":"2024-01-15 11:57:27.000000000","message":"\u003e Do we really need a third web server? It seems like we can test this feature with just the two used for all of the tests.\n\nDepends on how complex we want the tests to be. For example, _test_default_to_backup test is a little bit complex thanks to the third server.\n\n\u003e we can run multiple instances of the testing server in the VMs (right now there are 2 instances: on tcp port 80 and tcp port 81), it would reduce the need to have more VMs.\n\nThis seems like a good solution. Thank you! If we agree that merging the two servers into one is ok then it seems when it comes to the testing of backup members then it seems like a way to go.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"e085a29a35014b96cba86c07e5d4635b8418bf80","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":118,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # Create webservers 3 as webservers 1 and 2 are created in"},{"line_number":121,"context_line":"        # the parent class."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Create webserver 3"}],"source_content_type":"text/x-python","patch_set":28,"id":"9c0aaa92_90defa4a","line":120,"in_reply_to":"d5499355_4c559b05","updated":"2024-01-11 09:37:42.000000000","message":"quick note on this:\nwe can run multiple instances of the testing server in the VMs (right now there are 2 instances: on tcp port 80 and tcp port 81), it would reduce the need to have more VMs.\n\nhttps://opendev.org/openstack/octavia-tempest-plugin/src/branch/master/octavia_tempest_plugin/tests/test_base.py#L1112-L1121","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":541,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":542,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    def _test_delete_backup(self):"},{"line_number":545,"context_line":"        \"\"\"Test that we receive 503 when backup member is deleted."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        * Delete the backup member (webserver3)"}],"source_content_type":"text/x-python","patch_set":28,"id":"44cf1527_b1ecd41e","line":544,"updated":"2024-01-11 01:30:54.000000000","message":"Having this run from a different class will cause failures due to the parallel nature of tempest. I.e. it could delete the third member server while the other tests in this file are running and using web server 3.\n\nI wonder if we need this test or if we can get similar results by admin downing pool members, or changing the port number on the member configuration to be a not used port on the backend web server.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":541,"context_line":"                                CONF.load_balancer.build_interval,"},{"line_number":542,"context_line":"                                CONF.load_balancer.build_timeout)"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    def _test_delete_backup(self):"},{"line_number":545,"context_line":"        \"\"\"Test that we receive 503 when backup member is deleted."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        * Delete the backup member (webserver3)"}],"source_content_type":"text/x-python","patch_set":28,"id":"d734160d_77291797","line":544,"in_reply_to":"44cf1527_b1ecd41e","updated":"2024-01-15 11:57:27.000000000","message":"\u003e ... it could delete the third member server while the other tests in this file are running and using web server 3.\n\nI disagree. The test is executed in a separate class to prevent this from happening.\n\n\u003e I wonder if we need this test or if we can get similar results by admin downing pool members ...\n\nThat\u0027s a good point.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":581,"context_line":"            self.assertIn(\"503 Service Unavailable\", response)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"class BackupMembersTestIPv4(BackupMembersTestBase):"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"b69c266c_b648d1a0","line":584,"updated":"2024-01-11 01:30:54.000000000","message":"This is an anti-pattern with Tempest and Octavia.\nTempest runs all of the setup methods for each class, so you end up creating four load balancers by breaking these into different classes.\nThat can be slow and us up additional resources on the test host, causing longer test run times.\n\nIt\u0027s easy to see this behavior, just add a log line above the load balancer create call in the resource_setup() method.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":581,"context_line":"            self.assertIn(\"503 Service Unavailable\", response)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"class BackupMembersTestIPv4(BackupMembersTestBase):"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"56c11787_8ce6648b","line":584,"in_reply_to":"b69c266c_b648d1a0","updated":"2024-01-15 11:57:27.000000000","message":"I\u0027m aware of this behaviour. Separate classes are used in tempest:\n- when we want the test work with its own resources or\n- when we want to optimize the scheduling of the tests between the workers.\n\nThe reason why these tests are a separate class is that the following test (test_delete_backup) is deleting the servers and thus breaking the shared resources.\n\nBut I see why this can be an issue when it comes to amount resources we have available. If we agree to change the \"delete_backup_members\" test to downing the pool members instead of deleting them then the classes can be merged.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"40ac3d508ed7c9d5b9bd9d372253a22124f587c4","unresolved":true,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"},{"line_number":588,"context_line":"        self._test_default_to_backup()"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @decorators.idempotent_id(\u00273441e858-7ed9-4afb-8fdf-2684bb541da7\u0027)"},{"line_number":591,"context_line":"    def test_backup_to_default(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3902edef_a66fe7a3","line":588,"updated":"2024-01-11 01:30:54.000000000","message":"Using private methods like this makes it a bit hard to read. It\u0027s best to have the private method close to the test cases that are calling them. Otherwise we are scrolling back and forth a lot to understand what the code is doing.","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b180cb8576c64de90b6558ba7dcaa98ff5da9a55","unresolved":false,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"},{"line_number":588,"context_line":"        self._test_default_to_backup()"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @decorators.idempotent_id(\u00273441e858-7ed9-4afb-8fdf-2684bb541da7\u0027)"},{"line_number":591,"context_line":"    def test_backup_to_default(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"12e8bafa_31904a8c","line":588,"in_reply_to":"07f92c90_98e12599","updated":"2024-04-29 08:38:02.000000000","message":"Done","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"de617a913094b0058090900d4391fd20a62e1afa","unresolved":true,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"},{"line_number":588,"context_line":"        self._test_default_to_backup()"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @decorators.idempotent_id(\u00273441e858-7ed9-4afb-8fdf-2684bb541da7\u0027)"},{"line_number":591,"context_line":"    def test_backup_to_default(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"dd2c66d1_07985ca3","line":588,"in_reply_to":"3902edef_a66fe7a3","updated":"2024-01-15 11:57:27.000000000","message":"Do you have any specific suggestions on how the code should be updated?","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"02e2a439f1130a0b74fcf8a34817e19d94429715","unresolved":true,"context_lines":[{"line_number":585,"context_line":""},{"line_number":586,"context_line":"    @decorators.idempotent_id(\u0027ea205f33-6cec-44fb-9ec1-bafdcdd83294\u0027)"},{"line_number":587,"context_line":"    def test_default_to_backup(self):"},{"line_number":588,"context_line":"        self._test_default_to_backup()"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    @decorators.idempotent_id(\u00273441e858-7ed9-4afb-8fdf-2684bb541da7\u0027)"},{"line_number":591,"context_line":"    def test_backup_to_default(self):"}],"source_content_type":"text/x-python","patch_set":28,"id":"07f92c90_98e12599","line":588,"in_reply_to":"dd2c66d1_07985ca3","updated":"2024-04-10 09:53:27.000000000","message":"The IPv4 variant of all the `test_*` methods seem to be same as the IPv6 variant. In theory, you should be able to simply move those methods to the base class and the subclasses will inherit them. I am not sure about the `idempotent_id()` decorator though because IPv6 and IPv4 methods would have the same ID then. Would the test runner run two methods with the same ID?","commit_id":"aa8a63c66feab91a8029d8c42d548ea0787a307f"}]}
