)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"975f3ae0ad20e6f9a4eea33695f0847e24f4a390","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"af29b2df_a2d841cb","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"updated":"2026-02-11 07:35:11.000000000","message":"I think the key point will be how to configure it\n\nWe\u0027ve seen similar different proposals, and many different requests for a similar feature\nsome people want to be able to specify a list of AZs when creating a LB (for instance LB1 in az1 \u0026 az2, LB2 in az1 \u0026 az3), some even want to click on the desired AZs in horizon.\n\nI wonder if we can find a way to satisfy all those users.","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"dc2a03156558b8746711394b2acb5f8dcdffde31","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"69874ee1_f845e6e5","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"3221a629_13e9c855","updated":"2026-02-12 13:33:23.000000000","message":"we can discuss it with a wider team first (team meeting, or PTG if you can wait), I would prefer to get other folks\u0027 opinion on it.","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5581dba700bbfc34c5575fd6881e69026d30034a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"edd3574d_b5544794","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"69874ee1_f845e6e5","updated":"2026-02-12 13:35:02.000000000","message":"for this kind of changes, we usually ask people to write a spec to discuss the impact on the API, DB, and how it is integrated\n\nfor instance https://review.opendev.org/c/openstack/octavia/+/923571/8","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"026ead57fa46d4848fcbde3bd1f172553075a11e","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e09fa0d2_3abe3ea0","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"91f6cd75_afb8482d","updated":"2026-02-12 09:53:47.000000000","message":"* if LB1 is in az1 \u0026 az2, only these 2 AZs will be used\n  if LB1 is in az1, az2 \u0026 az3, 2 of the AZs will be used (randomly), in case of failover, the 3rd AZ can be used too\n* so far I have no idea 😄\n\n\u003e several (2 or more) AZs specified\n\ncurrently I think we can only pass one Octavia AZ when creating a LB\nI don\u0027t know the impact of changing this in the API, but it would be easier to control by users.\n\nanother approach could be:\n- replace your use_in_multizone bool with a list of strings (a list of multizone names: mz1,mz2)\n- admin can decide: az1 is in mz1 and mz2, az2 in mz\u003cx\u003e etc...\n- then we need to find a way to pass a multizone name when creating a LB","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"4da418cc4c49a9cb79c07707ef818ee3ba7eb305","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"91f6cd75_afb8482d","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"af29b2df_a2d841cb","updated":"2026-02-11 08:19:29.000000000","message":"Sounds reasonable.\n- Does it means, that: LB1 in az1 \u0026 az2 - will always be in these two zones?\nshould it be able to failover amphora in az3 (if it\u0027s enabled for multizone generally, but not for particular LB) ?\n\n- Is this case with specification list of az via API preferred or I could combine it?\n\nPotentially it could be combined with current approach, like:\nif multizone enabled and not AZ specified - use logic proposed in this PR.\nif multizone enabled and one AZ specified - use old logic for backport combatibility.\nif multizone enabled and several (2 or more) AZs specified - use only these Zones for deploy LBs amphoras and ignore extra available zones.","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"55105a37cdde9a442a98111c74c1e7f5a78add84","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"848088d5_88abec50","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"ca603aa0_7315476b","updated":"2026-05-21 06:09:21.000000000","message":"Done","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"7670e1678afe4f2e95544261c0b7d7daf564be65","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3221a629_13e9c855","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"e09fa0d2_3abe3ea0","updated":"2026-02-12 13:21:56.000000000","message":"got it. sounds good, I will try to add it and come back with changes.","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"82a90caf2b0ff4dcd8743aec583ead5c34c4892f","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support deploy amphora in different availability zones"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Added option to enable multizone deployment in Octavia config"},{"line_number":10,"context_line":"  Enabling this option changes behaviour for creation Amphora in"},{"line_number":11,"context_line":"  availability zones (more detailes below)."},{"line_number":12,"context_line":"- Added attribute for octavia availability zones, which indicates, that"},{"line_number":13,"context_line":"  AZ could be used in multizone deployment."},{"line_number":14,"context_line":"- Added attribute for amphora resource to indicate, which AZ was"},{"line_number":15,"context_line":"  calculated in multizone deployment."},{"line_number":16,"context_line":"- Added validation to create Loadbalancer with multizone enabled flag,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ca603aa0_7315476b","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":43},"in_reply_to":"edd3574d_b5544794","updated":"2026-05-17 18:42:31.000000000","message":"Proposal is created now: https://review.opendev.org/c/openstack/octavia/+/988883\nHowever I did not add logic for API extra options for LB yet.\nI will try to do it during next week","commit_id":"96e8041dbab59ea3bff519f69589170cad784adb"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"4fed3a421ac70fa083ebfcdf23f793e530924dd6","unresolved":true,"context_lines":[{"line_number":42,"context_line":"  * Set the same AZ for Backup amphora"},{"line_number":43,"context_line":"  * Try to find randomly any AZ not equal to Master\u0027s AZ (if it exist"},{"line_number":44,"context_line":"    set it for Backup Amphora)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Detailed description is available here:"},{"line_number":47,"context_line":"https://review.opendev.org/c/openstack/octavia/+/988883"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"The biggest part of PR is 1.5 k lines of tests for CreateCompute task."},{"line_number":50,"context_line":"It covers the ollowing cases:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"40281840_0334fdf7","line":47,"range":{"start_line":45,"start_character":0,"end_line":47,"end_character":55},"updated":"2026-06-22 11:03:18.000000000","message":"This must be either as `Depends-On` or this patch must be rebased on top of it, to prevent accidental merge before spec is approved","commit_id":"ac1c022ec4ad01f867c6ec082e2278e633422848"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"608bfa74ff4c4b6e411b34468aa9921189ed417e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  * Set the same AZ for Backup amphora"},{"line_number":43,"context_line":"  * Try to find randomly any AZ not equal to Master\u0027s AZ (if it exist"},{"line_number":44,"context_line":"    set it for Backup Amphora)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Detailed description is available here:"},{"line_number":47,"context_line":"https://review.opendev.org/c/openstack/octavia/+/988883"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"The biggest part of PR is 1.5 k lines of tests for CreateCompute task."},{"line_number":50,"context_line":"It covers the ollowing cases:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"2ad8c274_15eeac67","line":47,"range":{"start_line":45,"start_character":0,"end_line":47,"end_character":55},"in_reply_to":"40281840_0334fdf7","updated":"2026-06-23 07:49:39.000000000","message":"no problem. updated","commit_id":"ac1c022ec4ad01f867c6ec082e2278e633422848"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7bdadf9f4241b2cdaa1ea60250436f6837091135","unresolved":true,"context_lines":[{"line_number":55,"context_line":"* Failover LB after enabling multizone, when AZ is already calculated"},{"line_number":56,"context_line":"  for amphora"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Change-Id: Id391e43752c7d952ed3703275ee5d06ffbf038d6"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Signed-off-by: Sergey Kraynev \u003csergejyit@gmail.com\u003e"},{"line_number":61,"context_line":"Change-Id: I96a6d019aef823f5c13918bce874a88d008c53b9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"f92b0c23_29e3106b","line":61,"range":{"start_line":58,"start_character":1,"end_line":61,"end_character":52},"updated":"2026-07-08 07:24:36.000000000","message":"BTW you have 2 change-ids in the commit message","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[{"line_number":55,"context_line":"* Failover LB after enabling multizone, when AZ is already calculated"},{"line_number":56,"context_line":"  for amphora"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Change-Id: Id391e43752c7d952ed3703275ee5d06ffbf038d6"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Signed-off-by: Sergey Kraynev \u003csergejyit@gmail.com\u003e"},{"line_number":61,"context_line":"Change-Id: I96a6d019aef823f5c13918bce874a88d008c53b9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"d7d4ebe2_b502183b","line":61,"range":{"start_line":58,"start_character":1,"end_line":61,"end_character":52},"in_reply_to":"f92b0c23_29e3106b","updated":"2026-07-13 06:30:21.000000000","message":"oops. fixed. thank you for catching it.","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"89a6d05da2d89f65f01aea09828f69fa408a8748","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"41391c5b_ac9fde2f","updated":"2026-05-17 14:09:18.000000000","message":"@gthiemon@redhat.com hi, I added proposal referenced this PR.\nI also will try to update in short time this PR, according description in proposal and my last understanding how it works.","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30b8942ff6bf5fc9e442a6a87c658b56e798e009","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"616eb55a_708c4801","updated":"2026-04-07 11:35:51.000000000","message":"Further to Greg\u0027s comments about specifying the AZ, I have an idea around how it can be done within the current change. We could provide a list of allowed AZs for either the amphora or LB via the API which is then stored in the DB. \n\nWhen deciding which AZ the Amphora will reside in, the allowed AZs list would act as a filter and constrain the selection to only the AZs the user wants. Within that, it is presumably allowed for the Amphora to reside on any AZ the user specified as long as anti-affinity is maintained between Master \u0026 Backup\n\nI\u0027ve provided a few suggestions around how it could work rather than creating another patch. @sergejyit@gmail.com, if you think it\u0027s worth pursuing I could try and propose a code patch into your change to do this?\n\nI like the idea that AZs can be specified as being multizone or not. There may be cases where an admin does not wish to allow an AZ to be included in a multizone setup even if the user tried to create a multizone amphora on that AZ","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"6572bd1af9746122ebc0f69d79540ddcf8e00cf1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ce40821e_7b5ea192","updated":"2026-03-19 08:18:59.000000000","message":"I\u0027ve thought about this feature:\n\nwhat about adding an \"availability_zones\" attribute to the load balancer API?\n\nUsers would call POST /loadbalancer with\n{\n  \"availability_zones\": [\"az1\", az2\u0027]\n}\n\nwe would keep the existing \"availability_zone\" attribute (a string) for backward compat, so \"availability_zone\": \"az1\" would be the same as \"availability_zones\": [\"az1\"]\n\nit would be nicely integrated with octavia-dashboard, we would just update the choice box to a multi choice box for the AZs.\n\nWDYT about it?","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"4b3127b3e9cd393d58d55d453cd2e5811f41616c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"efa6d9f8_46548dd9","in_reply_to":"6511fdfd_b662e1fa","updated":"2026-05-13 07:57:03.000000000","message":"Hi, Gregory. Thank you for reminder.\nI actually re-worked this MR, but without API for passing AZ on LB creation.\nAnd put it on pause due to different workloads. I want to prepare solution + proposal during weekend.\nAnd let you know status on the next week. I will be happy some help after it with finalizing/review.","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"7206ecd6e07b4b58654a9e80c9c12e37c65e167d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f6595e2a_8fcc349b","in_reply_to":"ce40821e_7b5ea192","updated":"2026-03-23 10:39:19.000000000","message":"I think, that it\u0027s possible to do. \nHowever I\u0027d like also to support case, when AZs are not specified.\nFor example you are not familiar with existing zones and don\u0027t want to choose zones - you want to make sure, that zones will be different.","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"5a7e96deab64e867c93223f95d363fa805b3f32e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"601d93f3_756533cd","in_reply_to":"efa6d9f8_46548dd9","updated":"2026-05-27 11:35:36.000000000","message":"proposal: https://review.opendev.org/c/openstack/octavia/+/988883","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"974d8fb7e2e4eb16cbf0f15ecb25a0d0cd41d19b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6511fdfd_b662e1fa","in_reply_to":"f6595e2a_8fcc349b","updated":"2026-05-13 07:04:06.000000000","message":"ok so, having the possibility to:\n- explicitly select one or more AZs when creating a LB\n- implicitly create amphorae in AZs configured in \"multizone\" when creating a LB without passing AZs\n\nBTW are you still working on it? I really want to get this feature in the H release cycle, don\u0027t hesitate if you need help to implement the changes.","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"1f843bd930bf832926e2560bad57a6234771bbad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6a7cd8f3_575d5440","updated":"2026-05-20 16:15:08.000000000","message":"recheck - pip install issue","commit_id":"b3b66756eb19fc2fc0c8f2b0a6e8f9148433516d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9af767980e6961f7cc807293d46de80543909b84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"edc8b0f7_131a2029","updated":"2026-06-09 12:49:06.000000000","message":"Can you also add a releasenote that describes the feature?","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"2cb74fff4d33920d0cc37a302955a3ad884b0e32","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"062ba9ff_724f4669","updated":"2026-05-21 07:52:35.000000000","message":"Hm. I have not idea why functional-py310 is failed, when 3.13 passed.\nand I could not load logs for this failed job. @gthiemon@redhat.com could you please give an advise what to do here?","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"985c7024c4b88e1df45911059bdc229798c116e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"7e79a06e_97c9e51d","updated":"2026-05-25 14:28:10.000000000","message":"recheck - python 310 jobs have been removed","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"bd2ca7901e6a61d997a43c0b7d8f76ca4f6ea6b8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"6d1dfa54_3d384813","in_reply_to":"062ba9ff_724f4669","updated":"2026-05-21 08:32:49.000000000","message":"I\u0027ve just proposed a patch that removes the py310 jobs (3.11 is the minimal supported version)\nI hope it merges today","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"5a7e96deab64e867c93223f95d363fa805b3f32e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f6b5af8c_859fd18d","in_reply_to":"6d1dfa54_3d384813","updated":"2026-05-27 11:35:36.000000000","message":"Acknowledged","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"88371ee744ac34bc231bd47d625e12f8b66e376c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0da7aa8e_61f1cbb8","in_reply_to":"edc8b0f7_131a2029","updated":"2026-06-15 16:55:34.000000000","message":"sure, I will add it","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"24f56d09f8cb200e56860bdb28ce6db39e67b30b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"8533d51c_6eca92f4","updated":"2026-07-08 07:01:59.000000000","message":"release note is still missing\n\nI also noticed that the load balancer API hasn\u0027t been updated (adding `availability_zones` support), do you plan to address it?\n(as I requested it in the spec change, I can help to implement it if you prefer)","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"ec8bbafe_aa4aaabf","in_reply_to":"8533d51c_6eca92f4","updated":"2026-07-13 06:30:21.000000000","message":"Release Note - now added.\nRegarding new API. I wanted, to add it myself, but will be glad any help, if you want to get it asap.","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"24f56d09f8cb200e56860bdb28ce6db39e67b30b","unresolved":true,"context_lines":[{"line_number":488,"context_line":"                **err_kwargs)"},{"line_number":489,"context_line":"        if (lb_topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY and"},{"line_number":490,"context_line":"                len(availability_zones) \u003c 1):"},{"line_number":491,"context_line":"            err_kwargs[\"count\"] \u003d 1"},{"line_number":492,"context_line":"            raise exceptions.NotEnoughAvailabilityZonesWithUniqueComputeZone("},{"line_number":493,"context_line":"                **err_kwargs)"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"354c6a23_4c00e7c3","line":491,"range":{"start_line":491,"start_character":12,"end_line":491,"end_character":35},"updated":"2026-07-08 07:01:59.000000000","message":"err_kwargs[\"count\"] is already 1 (see line 481)","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[{"line_number":488,"context_line":"                **err_kwargs)"},{"line_number":489,"context_line":"        if (lb_topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY and"},{"line_number":490,"context_line":"                len(availability_zones) \u003c 1):"},{"line_number":491,"context_line":"            err_kwargs[\"count\"] \u003d 1"},{"line_number":492,"context_line":"            raise exceptions.NotEnoughAvailabilityZonesWithUniqueComputeZone("},{"line_number":493,"context_line":"                **err_kwargs)"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"50718ab3_e0c45b8d","line":491,"range":{"start_line":491,"start_character":12,"end_line":491,"end_character":35},"in_reply_to":"354c6a23_4c00e7c3","updated":"2026-07-13 06:30:21.000000000","message":"true, it\u0027s legacy after different messages and checks for different types of topologies. Previously I raise error if Active-Standby has less than 2 multizone AZs. Now it\u0027s the same as on failvoer and for Single topology.\n\nI will update this part.","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"octavia/common/data_models.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30b8942ff6bf5fc9e442a6a87c658b56e798e009","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        self.image_id \u003d image_id"},{"line_number":658,"context_line":"        self.compute_flavor \u003d compute_flavor"},{"line_number":659,"context_line":"        self.availability_zone \u003d availability_zone"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def delete(self):"},{"line_number":662,"context_line":"        for amphora in self.load_balancer.amphorae:"},{"line_number":663,"context_line":"            if amphora.id \u003d\u003d self.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"d5269a32_d4afe31c","line":660,"updated":"2026-04-07 11:35:51.000000000","message":"I think we could add a parameter here called allowed_availability_zones where the user could pass in a list of specific AZs via the API when using multizone","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"55105a37cdde9a442a98111c74c1e7f5a78add84","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        self.image_id \u003d image_id"},{"line_number":658,"context_line":"        self.compute_flavor \u003d compute_flavor"},{"line_number":659,"context_line":"        self.availability_zone \u003d availability_zone"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def delete(self):"},{"line_number":662,"context_line":"        for amphora in self.load_balancer.amphorae:"},{"line_number":663,"context_line":"            if amphora.id \u003d\u003d self.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"0bbb2020_17dab8cf","line":660,"in_reply_to":"8851a8b2_9037c642","updated":"2026-05-21 06:09:21.000000000","message":"Done","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"82a90caf2b0ff4dcd8743aec583ead5c34c4892f","unresolved":true,"context_lines":[{"line_number":657,"context_line":"        self.image_id \u003d image_id"},{"line_number":658,"context_line":"        self.compute_flavor \u003d compute_flavor"},{"line_number":659,"context_line":"        self.availability_zone \u003d availability_zone"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def delete(self):"},{"line_number":662,"context_line":"        for amphora in self.load_balancer.amphorae:"},{"line_number":663,"context_line":"            if amphora.id \u003d\u003d self.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"8851a8b2_9037c642","line":660,"in_reply_to":"d5269a32_d4afe31c","updated":"2026-05-17 18:42:31.000000000","message":"sure, @gthiemon@redhat.com mentioned the same.\nI want to combine currently provided approach with API option.\nThe idea is:\n- if not availability_zones option not specified for Lb - we use default logic for choosing AZs marked for miltizone\n- otherwise do the same logic but only on specified list of AZs (this list should be validated before for correctness )","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"}],"octavia/common/exceptions.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30b8942ff6bf5fc9e442a6a87c658b56e798e009","unresolved":true,"context_lines":[{"line_number":454,"context_line":"    code \u003d 400"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"class NotEnoughAvailabilityZonesWithUniqComputeZone(APIException):"},{"line_number":458,"context_line":"    msg \u003d _(\"Multizone deployment is enabled. Loadbalancer creation with \""},{"line_number":459,"context_line":"            \"%(topology)s topology requires at least %(count)s octavia AZ \""},{"line_number":460,"context_line":"            \"marked for using in multizone deployment. Currently enabled \""}],"source_content_type":"text/x-python","patch_set":9,"id":"a3f33130_c5722b91","line":457,"updated":"2026-04-07 11:35:51.000000000","message":"Typo? Should be Unique, not Uniq?","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"82a90caf2b0ff4dcd8743aec583ead5c34c4892f","unresolved":false,"context_lines":[{"line_number":454,"context_line":"    code \u003d 400"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"class NotEnoughAvailabilityZonesWithUniqComputeZone(APIException):"},{"line_number":458,"context_line":"    msg \u003d _(\"Multizone deployment is enabled. Loadbalancer creation with \""},{"line_number":459,"context_line":"            \"%(topology)s topology requires at least %(count)s octavia AZ \""},{"line_number":460,"context_line":"            \"marked for using in multizone deployment. Currently enabled \""}],"source_content_type":"text/x-python","patch_set":9,"id":"a7878d8f_6ca1ebb2","line":457,"in_reply_to":"a3f33130_c5722b91","updated":"2026-05-17 18:42:31.000000000","message":"fixed","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"}],"octavia/controller/worker/v2/tasks/compute_tasks.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"30b8942ff6bf5fc9e442a6a87c658b56e798e009","unresolved":true,"context_lines":[{"line_number":211,"context_line":"            self.az_repo.get_availability_zone_name_to_profile_mapping("},{"line_number":212,"context_line":"                db_apis.get_session())"},{"line_number":213,"context_line":"        )"},{"line_number":214,"context_line":"        # handle case, when amphora already has AZ and AZ is enabled"},{"line_number":215,"context_line":"        if previous_amphora_az and previous_amphora_az in az_to_az_profile_map:"},{"line_number":216,"context_line":"            return previous_amphora_az, previous_amphora_az"},{"line_number":217,"context_line":"        compute_zone_to_azs \u003d utils.group_compute_zone_to_azs("}],"source_content_type":"text/x-python","patch_set":9,"id":"04319184_92a3b138","line":214,"updated":"2026-04-07 11:35:51.000000000","message":"So I think at this point you could add a check if the Amphora has allowed_availability_zones set and if so, reduce the az_to_az_profile_map to only the allowed AZs. Then below when the AZ is selected randomly, it will definitely be created within one of the allowed AZs","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"82a90caf2b0ff4dcd8743aec583ead5c34c4892f","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            self.az_repo.get_availability_zone_name_to_profile_mapping("},{"line_number":212,"context_line":"                db_apis.get_session())"},{"line_number":213,"context_line":"        )"},{"line_number":214,"context_line":"        # handle case, when amphora already has AZ and AZ is enabled"},{"line_number":215,"context_line":"        if previous_amphora_az and previous_amphora_az in az_to_az_profile_map:"},{"line_number":216,"context_line":"            return previous_amphora_az, previous_amphora_az"},{"line_number":217,"context_line":"        compute_zone_to_azs \u003d utils.group_compute_zone_to_azs("}],"source_content_type":"text/x-python","patch_set":9,"id":"d33fc01a_a99f0d8f","line":214,"in_reply_to":"04319184_92a3b138","updated":"2026-05-17 18:42:31.000000000","message":"I removed this complicated logic. Now logic is simplified to way, that AZ will be chosen randomly without extra pre-calculation","commit_id":"ff62fc823e30ba9cdb36b7398b1e839d163608f2"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7f89662e05b555ec0a5a681593173c3db45f530b","unresolved":true,"context_lines":[{"line_number":170,"context_line":"                          amphora_id)"},{"line_number":171,"context_line":"            raise"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def calculate_octavia_az_for_miltizone_setup("},{"line_number":174,"context_line":"            self, loadbalancer_id, amphora_id, master_az_name, backup_az_name):"},{"line_number":175,"context_line":"        # Calculate AZs only on failover, because on creation they should be"},{"line_number":176,"context_line":"        # calculated out of the task"}],"source_content_type":"text/x-python","patch_set":11,"id":"acac837a_e770524f","line":173,"range":{"start_line":173,"start_character":33,"end_line":173,"end_character":41},"updated":"2026-06-08 12:35:23.000000000","message":"typo \"miltizone\"","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"88371ee744ac34bc231bd47d625e12f8b66e376c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                          amphora_id)"},{"line_number":171,"context_line":"            raise"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def calculate_octavia_az_for_miltizone_setup("},{"line_number":174,"context_line":"            self, loadbalancer_id, amphora_id, master_az_name, backup_az_name):"},{"line_number":175,"context_line":"        # Calculate AZs only on failover, because on creation they should be"},{"line_number":176,"context_line":"        # calculated out of the task"}],"source_content_type":"text/x-python","patch_set":11,"id":"700c281c_ab2716cf","line":173,"range":{"start_line":173,"start_character":33,"end_line":173,"end_character":41},"in_reply_to":"acac837a_e770524f","updated":"2026-06-15 16:55:34.000000000","message":"Done","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"7f89662e05b555ec0a5a681593173c3db45f530b","unresolved":true,"context_lines":[{"line_number":224,"context_line":"            amp.availability_zone for amp in current_amps"},{"line_number":225,"context_line":"            if amp.role and amp.status not in ("},{"line_number":226,"context_line":"                constants.DELETED, constants.AMPHORA_BOOTING)}"},{"line_number":227,"context_line":"        LOG.debug(\u0027Found used AZs by amphoras: %s\u0027)"},{"line_number":228,"context_line":"        not_used_azs \u003d list(availability_zones_names_set - used_azs)"},{"line_number":229,"context_line":"        # with not used az"},{"line_number":230,"context_line":"        if not_used_azs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba71e527_d09a2b4c","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":51},"updated":"2026-06-08 12:35:23.000000000","message":"arg is missing","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"88371ee744ac34bc231bd47d625e12f8b66e376c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            amp.availability_zone for amp in current_amps"},{"line_number":225,"context_line":"            if amp.role and amp.status not in ("},{"line_number":226,"context_line":"                constants.DELETED, constants.AMPHORA_BOOTING)}"},{"line_number":227,"context_line":"        LOG.debug(\u0027Found used AZs by amphoras: %s\u0027)"},{"line_number":228,"context_line":"        not_used_azs \u003d list(availability_zones_names_set - used_azs)"},{"line_number":229,"context_line":"        # with not used az"},{"line_number":230,"context_line":"        if not_used_azs:"}],"source_content_type":"text/x-python","patch_set":11,"id":"48030734_28de9d76","line":227,"range":{"start_line":227,"start_character":8,"end_line":227,"end_character":51},"in_reply_to":"ba71e527_d09a2b4c","updated":"2026-06-15 16:55:34.000000000","message":"Done","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"20ec10e2e045d6b1358fbec33b45da38ba9604e0","unresolved":true,"context_lines":[{"line_number":258,"context_line":"        # not suitable AZ use default"},{"line_number":259,"context_line":"        return None"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _update_amphora_az(self, amphora_id, az):"},{"line_number":262,"context_line":"        try:"},{"line_number":263,"context_line":"            self.amphora_repo.update(db_apis.get_session(),"},{"line_number":264,"context_line":"                                     id\u003damphora_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5955996b_f7eab51a","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":26},"updated":"2026-06-09 12:42:35.000000000","message":"This function doesn\u0027t work in my devstack, amp.availability_zone is still None after calling it.\nThe reason is that since sqlalchemy2 the DB sessions no longer auto commit the changes.\nTo fix it, you need to include the try/except block in a \"with db_apis.session().begin() as session:\" block (and pass session to update()), the DB update will be committed at the end of the with block.\n\nAlso note that DB update code usually resides in database_tasks.py","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"88371ee744ac34bc231bd47d625e12f8b66e376c","unresolved":true,"context_lines":[{"line_number":258,"context_line":"        # not suitable AZ use default"},{"line_number":259,"context_line":"        return None"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _update_amphora_az(self, amphora_id, az):"},{"line_number":262,"context_line":"        try:"},{"line_number":263,"context_line":"            self.amphora_repo.update(db_apis.get_session(),"},{"line_number":264,"context_line":"                                     id\u003damphora_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"eb4135eb_2677e861","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":26},"in_reply_to":"5955996b_f7eab51a","updated":"2026-06-15 16:55:34.000000000","message":"ok. The first update is simple, but the last suggestion will require some re-work + fix test and recheck. I will try to check it tomorrow.","commit_id":"153f39e2588794363542d13f3373ae84f8c54dec"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"24f56d09f8cb200e56860bdb28ce6db39e67b30b","unresolved":true,"context_lines":[{"line_number":269,"context_line":"        \"\"\""},{"line_number":270,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":271,"context_line":"            return"},{"line_number":272,"context_line":"        compute_id \u003d result"},{"line_number":273,"context_line":"        LOG.warning(\"Reverting compute create for amphora with id \""},{"line_number":274,"context_line":"                    \"%(amp)s and compute id: %(comp)s\","},{"line_number":275,"context_line":"                    {\u0027amp\u0027: amphora_id, \u0027comp\u0027: compute_id})"}],"source_content_type":"text/x-python","patch_set":15,"id":"6b650432_c9fd3f09","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":27},"updated":"2026-07-08 07:01:59.000000000","message":"If I\u0027m not mistaken, as you changed the return value of execute() from (compute_id) to (compute_id, availability_zone_name), here the result is now a tuple, so it should be `compute_id \u003d result[0]`.\ncan you check it?","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[{"line_number":269,"context_line":"        \"\"\""},{"line_number":270,"context_line":"        if isinstance(result, failure.Failure):"},{"line_number":271,"context_line":"            return"},{"line_number":272,"context_line":"        compute_id \u003d result"},{"line_number":273,"context_line":"        LOG.warning(\"Reverting compute create for amphora with id \""},{"line_number":274,"context_line":"                    \"%(amp)s and compute id: %(comp)s\","},{"line_number":275,"context_line":"                    {\u0027amp\u0027: amphora_id, \u0027comp\u0027: compute_id})"}],"source_content_type":"text/x-python","patch_set":15,"id":"6aad9713_2a3ee0d7","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":27},"in_reply_to":"6b650432_c9fd3f09","updated":"2026-07-13 06:30:21.000000000","message":"yes. you are right. fixed","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"octavia/db/migration/alembic_migrations/versions/fe12c33b254d_add_support_for_multizone_deployment.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"24f56d09f8cb200e56860bdb28ce6db39e67b30b","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    )"},{"line_number":36,"context_line":"    op.add_column("},{"line_number":37,"context_line":"        \u0027amphora\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027availability_zone\u0027, sa.String(512), nullable\u003dTrue)"},{"line_number":39,"context_line":"    )"},{"line_number":40,"context_line":"    op.create_foreign_key("},{"line_number":41,"context_line":"        u\u0027fk_amphora_availability_zone_name\u0027, u\u0027amphora\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0d809d_b5536003","line":38,"range":{"start_line":38,"start_character":49,"end_line":38,"end_character":52},"updated":"2026-07-08 07:01:59.000000000","message":"not consistent with the type defined in octavia/db/models.py\n`sa.String(512)` vs `sa.String(255)`","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    )"},{"line_number":36,"context_line":"    op.add_column("},{"line_number":37,"context_line":"        \u0027amphora\u0027,"},{"line_number":38,"context_line":"        sa.Column(\u0027availability_zone\u0027, sa.String(512), nullable\u003dTrue)"},{"line_number":39,"context_line":"    )"},{"line_number":40,"context_line":"    op.create_foreign_key("},{"line_number":41,"context_line":"        u\u0027fk_amphora_availability_zone_name\u0027, u\u0027amphora\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"e5616c40_dff8aba0","line":38,"range":{"start_line":38,"start_character":49,"end_line":38,"end_character":52},"in_reply_to":"ba0d809d_b5536003","updated":"2026-07-13 06:30:21.000000000","message":"fixed. thx","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"octavia/db/models.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"aa734ccf9779ae3a0d9e6ee010d9d59783391ba2","unresolved":true,"context_lines":[{"line_number":712,"context_line":"    load_balancer \u003d orm.relationship(\"LoadBalancer\", uselist\u003dFalse,"},{"line_number":713,"context_line":"                                     back_populates\u003d\u0027amphorae\u0027)"},{"line_number":714,"context_line":"    compute_flavor \u003d sa.Column(sa.String(255), nullable\u003dTrue)"},{"line_number":715,"context_line":"    availability_zone \u003d sa.Column("},{"line_number":716,"context_line":"        sa.String(255),"},{"line_number":717,"context_line":"        sa.ForeignKey(\"availability_zone.name\","},{"line_number":718,"context_line":"                      name\u003d\"fk_amphora_availability_zone_name\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"c53a88e5_793b95b8","line":715,"range":{"start_line":715,"start_character":4,"end_line":715,"end_character":21},"updated":"2026-07-08 14:50:17.000000000","message":"Sergey, did you check how the cached_zone attribute works (line 710)? I feel that it\u0027s used as the compute availability_zone in the existing code. So maybe we don\u0027t really need this new field","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ca6ea5796522b7887b60548c70d1449b19f57922","unresolved":true,"context_lines":[{"line_number":712,"context_line":"    load_balancer \u003d orm.relationship(\"LoadBalancer\", uselist\u003dFalse,"},{"line_number":713,"context_line":"                                     back_populates\u003d\u0027amphorae\u0027)"},{"line_number":714,"context_line":"    compute_flavor \u003d sa.Column(sa.String(255), nullable\u003dTrue)"},{"line_number":715,"context_line":"    availability_zone \u003d sa.Column("},{"line_number":716,"context_line":"        sa.String(255),"},{"line_number":717,"context_line":"        sa.ForeignKey(\"availability_zone.name\","},{"line_number":718,"context_line":"                      name\u003d\"fk_amphora_availability_zone_name\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"2e0e732c_6e80fd2e","line":715,"range":{"start_line":715,"start_character":4,"end_line":715,"end_character":21},"in_reply_to":"c53a88e5_793b95b8","updated":"2026-07-13 06:30:21.000000000","message":"I had the same thoughts. The main reason, why new attribute was added, because:\n- I want to split Amphoras with applied multizone setup and without it.\nFor example: I have existing deployment with some Loadbalancer. \nAfter upgrade these amphoras will get new \"availability_zone\" \u003d None.\nAnd only new amphoras (or old after failover) will get update on \"availability_zone\" attribute. \n\nAdditionally there is difference in meaning:\n* cached_zone - is zone taken from compute instance. So we get it from compute API.\n* availability_zone - is zone, which octavia request for creation amphora in it. and we set this value from octavia as \"tag\", where amphora should be created.","commit_id":"e0d0e37360cd90e817105621e958fbcb1c1a090d"}],"octavia/tests/unit/controller/worker/v2/tasks/test_compute_tasks.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        _db_amphora_mock.compute_id \u003d COMPUTE_ID"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        createcompute \u003d compute_tasks.ComputeCreate()"},{"line_number":159,"context_line":"        createcompute.revert((compute_id, availability_zone), _db_amphora_mock.id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        # Validate that the delete method was called properly"},{"line_number":162,"context_line":"        mock_driver.delete.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"6ae74dc3_d459bd6e","line":159,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        # Test that a delete exception is not raised"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        createcompute.revert((COMPUTE_ID, availability_zone), _db_amphora_mock.id)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @mock.patch(\u0027jinja2.Environment.get_template\u0027)"},{"line_number":170,"context_line":"    @mock.patch(\u0027octavia.amphorae.backends.agent.\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"35b2e376_a08b517c","line":167,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        _db_amphora_mock.compute_id \u003d COMPUTE_ID"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        createcompute \u003d compute_tasks.ComputeCreate()"},{"line_number":222,"context_line":"        createcompute.revert((compute_id, availability_zone), _db_amphora_mock.id)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # Validate that the delete method was called properly"},{"line_number":225,"context_line":"        mock_driver.delete.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"1bfc0655_402bda60","line":222,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        # Test that a delete exception is not raised"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        createcompute.revert((COMPUTE_ID, availability_zone), _db_amphora_mock.id)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @mock.patch(\u0027octavia.common.jinja.logging.logging_jinja_cfg.\u0027"},{"line_number":233,"context_line":"                \u0027LoggingJinjaTemplater.build_logging_config\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"62973a9f_01ccee54","line":230,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        _db_amphora_mock.compute_id \u003d COMPUTE_ID"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        createcompute \u003d compute_tasks.ComputeCreate()"},{"line_number":297,"context_line":"        createcompute.revert((compute_id, availability_zone), _db_amphora_mock.id)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        # Validate that the delete method was called properly"},{"line_number":300,"context_line":"        mock_driver.delete.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"139971fa_961051d4","line":297,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        # Test that a delete exception is not raised"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        createcompute.revert((COMPUTE_ID, availability_zone), _db_amphora_mock.id)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    @mock.patch(\u0027octavia.common.jinja.logging.logging_jinja_cfg.\u0027"},{"line_number":308,"context_line":"                \u0027LoggingJinjaTemplater.build_logging_config\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ef5631d_82b13f48","line":305,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        _db_amphora_mock.compute_id \u003d COMPUTE_ID"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        createcompute \u003d compute_tasks.ComputeCreate()"},{"line_number":366,"context_line":"        createcompute.revert((compute_id, availability_zone), _db_amphora_mock.id)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        # Validate that the delete method was called properly"},{"line_number":369,"context_line":"        mock_driver.delete.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":16,"id":"e4f4c11f_b2c49f3e","line":366,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        # Test that a delete exception is not raised"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        createcompute.revert((COMPUTE_ID, availability_zone), _db_amphora_mock.id)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    @mock.patch(\u0027octavia.common.jinja.logging.logging_jinja_cfg.\u0027"},{"line_number":377,"context_line":"                \u0027LoggingJinjaTemplater.build_logging_config\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"74e0b87b_7514871e","line":374,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        _db_amphora_mock.compute_id \u003d COMPUTE_ID"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        createcompute \u003d compute_tasks.ComputeCreate()"},{"line_number":447,"context_line":"        createcompute.revert((compute_id, availability_zone), _db_amphora_mock.id)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        # Validate that the delete method was called properly"},{"line_number":450,"context_line":"        mock_driver.delete.assert_called_once_with(COMPUTE_ID)"}],"source_content_type":"text/x-python","patch_set":16,"id":"785dfe05_9cbd60a2","line":447,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6818211cb83bacbfef850e825c8fc8a532edc2a0","unresolved":false,"context_lines":[{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        # Test that a delete exception is not raised"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        createcompute.revert((COMPUTE_ID, availability_zone), _db_amphora_mock.id)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    @mock.patch(\u0027octavia.controller.worker.amphora_rate_limit\u0027"},{"line_number":457,"context_line":"                \u0027.AmphoraBuildRateLimit.remove_from_build_req_queue\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"29f39170_1e06fc69","line":454,"updated":"2026-07-13 09:10:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"d738b08f42b8a8d2022eccb2b32fcc87804e8de3"}]}
