)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"50102c1fa50dc5cf1b2fe35759aeb807abf2e914","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RFE: https://review.opendev.org/c/openstack/octavia/+/885490"},{"line_number":10,"context_line":"Blueprint: https://blueprints.launchpad.net/octavia/+spec/octavia-resize-loadbalancer"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If8f2997e35f175360d3903d256486a484e8914fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"651850c6_aebe3db8","line":11,"updated":"2023-10-24 15:28:22.000000000","message":"\"Closes-Bug: #2023198\" line should be added.","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"70912231fd8db8ea00640622c0680eb856a7f45d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"RFE: https://review.opendev.org/c/openstack/octavia/+/885490"},{"line_number":10,"context_line":"Blueprint: https://blueprints.launchpad.net/octavia/+spec/octavia-resize-loadbalancer"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: If8f2997e35f175360d3903d256486a484e8914fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"bed243b0_a7308044","line":11,"in_reply_to":"651850c6_aebe3db8","updated":"2023-11-03 15:22:58.000000000","message":"Done","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7652d8ef_da2a3541","updated":"2023-10-25 16:31:25.000000000","message":"Thanks Pierre-Yves, I added a few comments","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"58ef6b97_cb505247","updated":"2023-11-03 15:22:00.000000000","message":"I\u0027ve made a few changes in response to Omer Schwartz\u0027s comments.","commit_id":"74821ef3b6f825aff221c015164b777a8e315c3e"},{"author":{"_account_id":35916,"name":"Pham Le Gia Dai","display_name":"Dai","email":"daipham.3213@gmail.com","username":"daiplg","status":"Full Stack Dev"},"change_message_id":"e0e22d6a476fd5487d584cd0917127d8f91453e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"8e05b901_54eeb09d","updated":"2024-05-16 09:54:02.000000000","message":"Why don\u0027t we just using resize API of nova https://docs.openstack.org/nova/latest/user/resize.html instead of failover a whole load balancer? Isn\u0027t it easier?","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"572035309c935a88d5502eb1fe3adad9609091ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"74dc92f9_6b2ea385","updated":"2023-11-22 19:15:53.000000000","message":"recheck","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":34609,"name":"Maxim Monin","email":"maximmonin@gmail.com","username":"maximmonin"},"change_message_id":"3ebcc044504ac3309b3d0e6fdd1bf67d9beaa2fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1f61c603_66b03513","in_reply_to":"8e05b901_54eeb09d","updated":"2024-06-12 00:49:08.000000000","message":"Failover creates new VM, stops/deletes old. Less downtime. Plus it is possible to resize to lower disk size with failover","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"814e775b5bc03977167e9b2186e422fa1f680ac5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2db895e8_53e53353","updated":"2026-04-13 09:00:04.000000000","message":"Couple of fixes suggested for the func test failures. This should hopefully get the pipeline passing","commit_id":"7f6098361feea5ba3de03871b76a85e1e21db659"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"2a158e95_771f1f91","updated":"2026-04-28 11:55:58.000000000","message":"I think we\u0027re really close to making it!\n\nadditional comment: we need a releasenote with a feature entry","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"2c347b266aa8982336862b8e2aa75b9b48e93cad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a5e29f8e_a97df8bd","updated":"2026-04-16 09:28:12.000000000","message":"LGTM, reviewed with assistance from Claude Sonnet 4.6","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"7f836873ab78caa7a2974bc6175f0039715fa2c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8af049f8_5811c165","updated":"2026-04-14 08:02:36.000000000","message":"recheck - timeouts","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ea68b3c695165bf305062a56f241228a5b0dce19","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"8f1c5186_79c25f2b","updated":"2026-05-13 15:43:24.000000000","message":"openstack-tox-functional-py310 failed but we are removing py310 support, so it should be fix when https://review.opendev.org/c/openstack/octavia/+/986889/2 merges","commit_id":"d4b471fdd299b3a8d2368128ad26cefbfd453a3f"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":16707,"name":"Mohankumar","email":"nmohankumar1011@gmail.com","username":"mohankumar_n"},"change_message_id":"99a2ac32b19906b44f16b3fac4d77372749d596f","unresolved":true,"context_lines":[{"line_number":1429,"context_line":"  in: body"},{"line_number":1430,"context_line":"  required: true"},{"line_number":1431,"context_line":"  type: object"},{"line_number":1432,"context_line":"resize-flavor_id:"},{"line_number":1433,"context_line":"  description: |"},{"line_number":1434,"context_line":"    New flavor id apply by the resize."},{"line_number":1435,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"21e3652e_9488b524","line":1432,"range":{"start_line":1432,"start_character":0,"end_line":1432,"end_character":17},"updated":"2023-08-01 15:59:29.000000000","message":"nit : resize-flavor-id","commit_id":"3826ecea09abcb01728c2021020557145d7f11fb"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e0fa2aa45b81910277264dd9387bd20d588903d","unresolved":true,"context_lines":[{"line_number":1273,"context_line":"  description: |"},{"line_number":1274,"context_line":"    New flavor id applied by the resize."},{"line_number":1275,"context_line":"  in: body"},{"line_number":1276,"context_line":"  require: true"},{"line_number":1277,"context_line":"  type: uuid"},{"line_number":1278,"context_line":"operating_status:"},{"line_number":1279,"context_line":"  description: |"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"6adb57ab_d6520b7f","line":1276,"range":{"start_line":1276,"start_character":2,"end_line":1276,"end_character":9},"updated":"2025-09-18 05:46:48.000000000","message":"required","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"}],"api-ref/source/v2/loadbalancer.inc":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":true,"context_lines":[{"line_number":646,"context_line":""},{"line_number":647,"context_line":"   - 202"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":".. rest_status_code:: error ../http-status.yaml"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"   - 401"},{"line_number":652,"context_line":"   - 403"},{"line_number":653,"context_line":"   - 404"},{"line_number":654,"context_line":"   - 409"},{"line_number":655,"context_line":"   - 500"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"Request"},{"line_number":658,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":7,"id":"7c5f2a88_4b59b268","line":655,"range":{"start_line":649,"start_character":0,"end_line":655,"end_character":8},"updated":"2023-10-25 16:31:25.000000000","message":"and 400","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":false,"context_lines":[{"line_number":646,"context_line":""},{"line_number":647,"context_line":"   - 202"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":".. rest_status_code:: error ../http-status.yaml"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"   - 401"},{"line_number":652,"context_line":"   - 403"},{"line_number":653,"context_line":"   - 404"},{"line_number":654,"context_line":"   - 409"},{"line_number":655,"context_line":"   - 500"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"Request"},{"line_number":658,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":7,"id":"3ab9b4bf_256cefaf","line":655,"range":{"start_line":649,"start_character":0,"end_line":655,"end_character":8},"in_reply_to":"7c5f2a88_4b59b268","updated":"2023-11-03 15:22:00.000000000","message":"It\u0027s added","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"}],"octavia/api/drivers/amphora_driver/v2/driver.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        payload \u003d {consts.LOAD_BALANCER_ID: loadbalancer_id}"},{"line_number":167,"context_line":"        self.client.cast({}, \u0027failover_load_balancer\u0027, **payload)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def loadbalancer_failover_with_flavor(self, loadbalancer_id, flavor_id):"},{"line_number":170,"context_line":"        payload \u003d {consts.LOAD_BALANCER_ID: loadbalancer_id,"},{"line_number":171,"context_line":"                   consts.FLAVOR_ID: flavor_id}"},{"line_number":172,"context_line":"        self.client.cast({}, \u0027failover_load_balancer_with_flavor\u0027, **payload)"}],"source_content_type":"text/x-python","patch_set":17,"id":"c80ae234_6dbda099","line":169,"range":{"start_line":169,"start_character":8,"end_line":169,"end_character":41},"updated":"2026-04-28 11:55:58.000000000","message":"to be consistent, this method must be added to octavia-lib too\nlike loadbalancer_failover https://github.com/openstack/octavia-lib/blob/8cea39b2d8faddf498b3dc71c1aa69a6e4182bb2/octavia_lib/api/drivers/provider_base.py#L98\n\nand the dependency to octavia-lib should be updated to the future version\n\nthe method should also be added to the other provider drivers like the noop-driver\nhttps://github.com/openstack/octavia/blob/19dec79e4b223d1cfca18fde88c01307405c0b34/octavia/api/drivers/noop_driver/driver.py#L294-L295","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":true,"context_lines":[{"line_number":933,"context_line":"        lock_session \u003d context.session"},{"line_number":934,"context_line":"        lock_session.begin()"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        if self.repositories.check_quota_met("},{"line_number":937,"context_line":"                context.session,"},{"line_number":938,"context_line":"                lock_session,"},{"line_number":939,"context_line":"                data_models.LoadBalancer,"},{"line_number":940,"context_line":"                db_lb.project_id):"},{"line_number":941,"context_line":"            raise exceptions.QuotaException("},{"line_number":942,"context_line":"                resource\u003ddata_models.LoadBalancer._name())"},{"line_number":943,"context_line":"        self._test_and_set_failover_prov_status(lock_session, self.lb_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"60969576_6795c5f5","line":940,"range":{"start_line":936,"start_character":8,"end_line":940,"end_character":34},"updated":"2023-10-25 16:31:25.000000000","message":"Just to make sure: we are sending a POST request, but we are not actually adding another LB, so in the case we are having the \"quota-max-number\" of LBs (without actually meeting it), we won\u0027t be able to resize any LB.\n\nbtw, failover sends a PUT api request, can I ask why resize (which fails over and changes the existing LB to use an existing flavor) uses POST request?","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":false,"context_lines":[{"line_number":933,"context_line":"        lock_session \u003d context.session"},{"line_number":934,"context_line":"        lock_session.begin()"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        if self.repositories.check_quota_met("},{"line_number":937,"context_line":"                context.session,"},{"line_number":938,"context_line":"                lock_session,"},{"line_number":939,"context_line":"                data_models.LoadBalancer,"},{"line_number":940,"context_line":"                db_lb.project_id):"},{"line_number":941,"context_line":"            raise exceptions.QuotaException("},{"line_number":942,"context_line":"                resource\u003ddata_models.LoadBalancer._name())"},{"line_number":943,"context_line":"        self._test_and_set_failover_prov_status(lock_session, self.lb_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab5c4d7_4b40fd1e","line":940,"range":{"start_line":936,"start_character":8,"end_line":940,"end_character":34},"in_reply_to":"60969576_6795c5f5","updated":"2023-11-03 15:22:00.000000000","message":"Using a PUT request makes more sense, because in the end you\u0027re just updating the LB, not creating it. I had opted for a POST by default. I\u0027ll also modify the RFE.","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":919,"context_line":"                         status_code\u003d202)"},{"line_number":920,"context_line":"    def put(self, resize_):"},{"line_number":921,"context_line":"        \"\"\"Resize a loadbalancer\"\"\""},{"line_number":922,"context_line":"        new_flavor_id \u003d resize_.new_flavor_id"},{"line_number":923,"context_line":"        context \u003d pecan_request.context.get(\u0027octavia_context\u0027)"},{"line_number":924,"context_line":"        with context.session.begin():"},{"line_number":925,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"68da8aac_0048b0a2","line":922,"range":{"start_line":922,"start_character":8,"end_line":922,"end_character":21},"updated":"2023-11-17 09:48:21.000000000","message":"can we check that the LB isn\u0027t already using \"new_flavor_id\"? we could skip the update if the flavor is already set","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":919,"context_line":"                         status_code\u003d202)"},{"line_number":920,"context_line":"    def put(self, resize_):"},{"line_number":921,"context_line":"        \"\"\"Resize a loadbalancer\"\"\""},{"line_number":922,"context_line":"        new_flavor_id \u003d resize_.new_flavor_id"},{"line_number":923,"context_line":"        context \u003d pecan_request.context.get(\u0027octavia_context\u0027)"},{"line_number":924,"context_line":"        with context.session.begin():"},{"line_number":925,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"4d9500f3_177685f9","line":922,"range":{"start_line":922,"start_character":8,"end_line":922,"end_character":21},"in_reply_to":"68da8aac_0048b0a2","updated":"2023-11-22 16:06:13.000000000","message":"Good point I made a check for that.","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":926,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"        self._auth_validate_action(context, db_lb.project_id,"},{"line_number":929,"context_line":"                                   constants.RBAC_POST_RESIZE)"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        driver \u003d driver_factory.get_driver(db_lb.provider)"},{"line_number":932,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"0de1ff26_e42cfeb4","line":929,"range":{"start_line":929,"start_character":50,"end_line":929,"end_character":54},"updated":"2023-11-17 09:48:21.000000000","message":"s/POST/PUT/","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":"        self._auth_validate_action(context, db_lb.project_id,"},{"line_number":929,"context_line":"                                   constants.RBAC_POST_RESIZE)"},{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        driver \u003d driver_factory.get_driver(db_lb.provider)"},{"line_number":932,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3cd45781_516ddcc1","line":929,"range":{"start_line":929,"start_character":50,"end_line":929,"end_character":54},"in_reply_to":"0de1ff26_e42cfeb4","updated":"2023-11-22 16:06:13.000000000","message":"Acknowledged","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        driver \u003d driver_factory.get_driver(db_lb.provider)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        lock_session \u003d context.session"},{"line_number":934,"context_line":"        lock_session.begin()"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        self._test_and_set_failover_prov_status(lock_session, self.lb_id)"},{"line_number":937,"context_line":"        LOG.info(\"Sending a failover request to resize the load balancer \""},{"line_number":938,"context_line":"                 \"%s to the flavor %s with provider %s\","},{"line_number":939,"context_line":"                 self.lb_id, new_flavor_id, driver.name)"},{"line_number":940,"context_line":"        driver_utils.call_provider("},{"line_number":941,"context_line":"            driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":942,"context_line":"            self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"46b12312_0077da15","line":942,"range":{"start_line":933,"start_character":6,"end_line":942,"end_character":38},"updated":"2023-11-17 09:48:21.000000000","message":"I think it might lock the DB, because you begin a transaction, but never commit it\n\nyou can replace \n\n```\nlock_session \u003d context.session\nlock_session.begin()\n```\n\nwith\n\n```\nwith context.session.begin():\n```\n\nthen replace all the occurrences of lock_session with context.session\n\nwith this \"with\" block, the change will be automatically committed to the DB at the end of the block (basically when we are sure that the provider was called), and rollbacks are also handled in case of exceptions.\n\n(similar to the failover function in the previous class)","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":930,"context_line":""},{"line_number":931,"context_line":"        driver \u003d driver_factory.get_driver(db_lb.provider)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        lock_session \u003d context.session"},{"line_number":934,"context_line":"        lock_session.begin()"},{"line_number":935,"context_line":""},{"line_number":936,"context_line":"        self._test_and_set_failover_prov_status(lock_session, self.lb_id)"},{"line_number":937,"context_line":"        LOG.info(\"Sending a failover request to resize the load balancer \""},{"line_number":938,"context_line":"                 \"%s to the flavor %s with provider %s\","},{"line_number":939,"context_line":"                 self.lb_id, new_flavor_id, driver.name)"},{"line_number":940,"context_line":"        driver_utils.call_provider("},{"line_number":941,"context_line":"            driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":942,"context_line":"            self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dd67d4ee_512e8b4d","line":942,"range":{"start_line":933,"start_character":6,"end_line":942,"end_character":38},"in_reply_to":"46b12312_0077da15","updated":"2023-11-22 16:06:13.000000000","message":"Acknowledged","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":34609,"name":"Maxim Monin","email":"maximmonin@gmail.com","username":"maximmonin"},"change_message_id":"b644edc87cd1a125551b6f4dd0301ce8092b1143","unresolved":true,"context_lines":[{"line_number":943,"context_line":"                     \"load balancer \""},{"line_number":944,"context_line":"                     \"%s to the flavor %s with provider %s\","},{"line_number":945,"context_line":"                     self.lb_id, new_flavor_id, driver.name)"},{"line_number":946,"context_line":"            driver_utils.call_provider("},{"line_number":947,"context_line":"                driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":948,"context_line":"                self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"91844fd4_aa9b3b5c","line":946,"range":{"start_line":946,"start_character":12,"end_line":946,"end_character":39},"updated":"2024-07-25 09:09:36.000000000","message":"Also failover operation checks provisioning_status !\u003d \"PENDING_UPDATE\", else 409 will be returned","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":35916,"name":"Pham Le Gia Dai","display_name":"Dai","email":"daipham.3213@gmail.com","username":"daiplg","status":"Full Stack Dev"},"change_message_id":"dd9c01884d591398bc6d0a0f29a2c67d07b3a646","unresolved":true,"context_lines":[{"line_number":943,"context_line":"                     \"load balancer \""},{"line_number":944,"context_line":"                     \"%s to the flavor %s with provider %s\","},{"line_number":945,"context_line":"                     self.lb_id, new_flavor_id, driver.name)"},{"line_number":946,"context_line":"            driver_utils.call_provider("},{"line_number":947,"context_line":"                driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":948,"context_line":"                self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"6a374e94_815274dd","line":946,"updated":"2024-05-23 07:51:58.000000000","message":"We don\u0027t validate the topology change? In the specs, there is a part:\n\n```\nA check will be added before the start of the failover to prevent migration\nto a flavor profile topology different from the original one. A user cannot\nmigrate from a flavorprofile standalone to active/passive.\n```","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":35916,"name":"Pham Le Gia Dai","display_name":"Dai","email":"daipham.3213@gmail.com","username":"daiplg","status":"Full Stack Dev"},"change_message_id":"fb43d3d41200ce36f8e1db157a66a9893b1032c2","unresolved":false,"context_lines":[{"line_number":943,"context_line":"                     \"load balancer \""},{"line_number":944,"context_line":"                     \"%s to the flavor %s with provider %s\","},{"line_number":945,"context_line":"                     self.lb_id, new_flavor_id, driver.name)"},{"line_number":946,"context_line":"            driver_utils.call_provider("},{"line_number":947,"context_line":"                driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":948,"context_line":"                self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3be016c6_9cadf9b7","line":946,"in_reply_to":"6a374e94_815274dd","updated":"2024-09-23 09:30:58.000000000","message":"Done","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":34609,"name":"Maxim Monin","email":"maximmonin@gmail.com","username":"maximmonin"},"change_message_id":"8bb7e6f15ac688cd23b5070e326cfbb5f5a6d3af","unresolved":false,"context_lines":[{"line_number":943,"context_line":"                     \"load balancer \""},{"line_number":944,"context_line":"                     \"%s to the flavor %s with provider %s\","},{"line_number":945,"context_line":"                     self.lb_id, new_flavor_id, driver.name)"},{"line_number":946,"context_line":"            driver_utils.call_provider("},{"line_number":947,"context_line":"                driver.name, driver.loadbalancer_failover_with_flavor,"},{"line_number":948,"context_line":"                self.lb_id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5d07391f_ca5a0025","line":946,"range":{"start_line":946,"start_character":12,"end_line":946,"end_character":39},"in_reply_to":"91844fd4_aa9b3b5c","updated":"2024-07-25 09:40:05.000000000","message":"Done","commit_id":"d04e4ff08574ae57bdf4f1e44ccaa1b1d7e15bfc"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e0fa2aa45b81910277264dd9387bd20d588903d","unresolved":true,"context_lines":[{"line_number":969,"context_line":"        with context.session.begin():"},{"line_number":970,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"},{"line_number":971,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"        if db_lb.flavor_id \u003d\u003d new_flavor_id:"},{"line_number":974,"context_line":"            LOG.info(\"Load balancer %s is already with this flavor %s.\","},{"line_number":975,"context_line":"                     db_lb.id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"629431a6_7eb4ef95","line":972,"updated":"2025-09-18 05:46:48.000000000","message":"here we must validate that new_flavor_id exists\n\nwe can also validate the content of the flavor:\nfor instance, resizing from a flavor with a SINGLE topology to a ACTIVE_STANDBY topology is problematic, because the failover flow doesn\u0027t create a server group that allows to use anti-affinity in Nova\nso here we may check the the (optional) topology of the flavor is the same as the topology of the LB.\n(and we can add support for resizing from SINGLE to A/S in a followup patch)","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9a07886de1eebbc39499a17354a7346da0aba06d","unresolved":true,"context_lines":[{"line_number":969,"context_line":"        with context.session.begin():"},{"line_number":970,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"},{"line_number":971,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"        if db_lb.flavor_id \u003d\u003d new_flavor_id:"},{"line_number":974,"context_line":"            LOG.info(\"Load balancer %s is already with this flavor %s.\","},{"line_number":975,"context_line":"                     db_lb.id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"81428e24_3dfc129d","line":972,"in_reply_to":"629431a6_7eb4ef95","updated":"2025-09-18 05:50:52.000000000","message":"we also need to check that the provider_name of the flavorprofile is the same","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":false,"context_lines":[{"line_number":969,"context_line":"        with context.session.begin():"},{"line_number":970,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"},{"line_number":971,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"        if db_lb.flavor_id \u003d\u003d new_flavor_id:"},{"line_number":974,"context_line":"            LOG.info(\"Load balancer %s is already with this flavor %s.\","},{"line_number":975,"context_line":"                     db_lb.id, new_flavor_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"43a903a6_18d18e62","line":972,"in_reply_to":"81428e24_3dfc129d","updated":"2026-04-28 11:55:58.000000000","message":"Done","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e0fa2aa45b81910277264dd9387bd20d588903d","unresolved":true,"context_lines":[{"line_number":974,"context_line":"            LOG.info(\"Load balancer %s is already with this flavor %s.\","},{"line_number":975,"context_line":"                     db_lb.id, new_flavor_id)"},{"line_number":976,"context_line":"            raise exceptions.ValidationException("},{"line_number":977,"context_line":"                  detail\u003d_(\"Load balancer is already has this flavor.\"))"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        self._auth_validate_action(context, db_lb.project_id,"},{"line_number":980,"context_line":"                                   constants.RBAC_PUT_RESIZE)"}],"source_content_type":"text/x-python","patch_set":13,"id":"f97bba95_3b97b10f","line":977,"range":{"start_line":977,"start_character":42,"end_line":977,"end_character":44},"updated":"2025-09-18 05:46:48.000000000","message":"remove \"is\"","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":true,"context_lines":[{"line_number":984,"context_line":"                                                      id\u003dnew_flavor_id)"},{"line_number":985,"context_line":"            if not new_flavor:"},{"line_number":986,"context_line":"                raise exceptions.ValidationException("},{"line_number":987,"context_line":"                    detail\u003d_(\"Invalid flavor_id.\"))"},{"line_number":988,"context_line":"            if not new_flavor.enabled:"},{"line_number":989,"context_line":"                raise exceptions.DisabledOption(option\u003d\u0027flavor\u0027,"},{"line_number":990,"context_line":"                                                value\u003dnew_flavor_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"a02133e2_4190d0e4","line":987,"range":{"start_line":987,"start_character":38,"end_line":987,"end_character":47},"updated":"2026-04-28 11:55:58.000000000","message":"\"Invalid new_flavor_id\"","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":true,"context_lines":[{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":"        new_flavor_topology \u003d new_flavor_dict.get("},{"line_number":1003,"context_line":"            constants.LOADBALANCER_TOPOLOGY)"},{"line_number":1004,"context_line":"        if (new_flavor_topology and"},{"line_number":1005,"context_line":"                new_flavor_topology !\u003d db_lb.topology):"},{"line_number":1006,"context_line":"            raise exceptions.ValidationException("},{"line_number":1007,"context_line":"                detail\u003d_(\"Flavor \u0027%(flav)s\u0027 is not compatible with load \""},{"line_number":1008,"context_line":"                         \"balancer topology \u0027%(topology)s\u0027\") %"}],"source_content_type":"text/x-python","patch_set":17,"id":"9b9ba2c1_e34146c4","line":1005,"range":{"start_line":1004,"start_character":8,"end_line":1005,"end_character":55},"updated":"2026-04-28 11:55:58.000000000","message":"one case doesn\u0027t work here:\n\na LB created with flavorprofile {\"compute_flavor\": \"flav1\"} \u003d\u003e SINGLE topology\nresized with flavorprofile {\"loadbalancer_topology\": \"ACTIVE_STANDBY\", \"compute_flavor\": \"flav2\"} \u003d\u003e ACTIVE_STANDBY topology\n\nif new_flavor_topology is not present in the new_flavor, db_lb.topology should be be compared to CONF.controller_worker.loadbalancer_topology","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"6a91927607f2aa8b6805662429d1779e917728a9","unresolved":true,"context_lines":[{"line_number":970,"context_line":"            db_lb \u003d self._get_db_lb(context.session, self.lb_id,"},{"line_number":971,"context_line":"                                    show_deleted\u003dFalse)"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":"        if db_lb.flavor_id \u003d\u003d new_flavor_id:"},{"line_number":974,"context_line":"            LOG.info(\"Load balancer %s is already with this flavor %s.\","},{"line_number":975,"context_line":"                     db_lb.id, new_flavor_id)"},{"line_number":976,"context_line":"            raise exceptions.ValidationException("},{"line_number":977,"context_line":"                  detail\u003d_(\"Load balancer is already has this flavor.\"))"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        self._auth_validate_action(context, db_lb.project_id,"},{"line_number":980,"context_line":"                                   constants.RBAC_PUT_RESIZE)"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"        with context.session.begin():"},{"line_number":983,"context_line":"            new_flavor \u003d self.repositories.flavor.get(context.session,"},{"line_number":984,"context_line":"                                                      id\u003dnew_flavor_id)"},{"line_number":985,"context_line":"            if not new_flavor:"}],"source_content_type":"text/x-python","patch_set":19,"id":"505d62bb_618aaf48","line":982,"range":{"start_line":973,"start_character":1,"end_line":982,"end_character":37},"updated":"2026-05-13 08:34:58.000000000","message":"I think it would be better to put the code from line 973 to 1000 under the same \"with context.session.begin():\" block (line 968)\n\nit looks like the current code triggers a \n```\nsqlalchemy.exc.InvalidRequestError: A transaction is already begun on this Session.\n```","commit_id":"9e6e389d531c151c09ad60e4d3eae11d669ea0a1"}],"octavia/api/v2/types/load_balancer.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class LoadBalancerResizeRootPOST(types.BaseType):"},{"line_number":145,"context_line":"    new_flavor_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"class LoadBalancerPUT(BaseLoadBalancerType):"}],"source_content_type":"text/x-python","patch_set":7,"id":"c9762a0c_45349ac3","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":52},"updated":"2023-10-25 16:31:25.000000000","message":"I don\u0027t know if I understood it correctly, but in the spec you mentioned\n--flavor \u003cflavor-id|flavor-name\u003e\nwould that line (#145) means it could be only flavor-id ?","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":true,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class LoadBalancerResizeRootPOST(types.BaseType):"},{"line_number":145,"context_line":"    new_flavor_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"class LoadBalancerPUT(BaseLoadBalancerType):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9821fd4b_f7f1f0c0","line":145,"range":{"start_line":145,"start_character":4,"end_line":145,"end_character":52},"in_reply_to":"c9762a0c_45349ac3","updated":"2023-11-03 15:22:00.000000000","message":"I don\u0027t know if it\u0027s not client-side because in the JSON I pass to the request it\u0027s only the ID I use. What do you think?","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"4cc60a6d192bcaafa0e4c0c50e866159b07d81c6","unresolved":true,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"class LoadBalancerResizeRootPUT(types.BaseType):"},{"line_number":170,"context_line":"    new_flavor_id \u003d wtypes.wsattr(wtypes.UuidType())"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"class LoadBalancerStatusResponse(BaseLoadBalancerType):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7c7234c6_e7283787","line":170,"updated":"2026-04-28 11:55:58.000000000","message":"I think we should add mandatory\u003dTrue here","commit_id":"73d2a82075411468ea176f4eceaaa32af71db411"}],"octavia/controller/worker/v2/controller_worker.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":true,"context_lines":[{"line_number":1126,"context_line":"        Note: This expects the load balancer to already be in"},{"line_number":1127,"context_line":"        provisioning_status\u003dPENDING_UPDATE state."},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        :param load_balancer_id: ID for load balancer to failover"},{"line_number":1130,"context_line":"        :returns: None"},{"line_number":1131,"context_line":"        :raises octavia.commom.exceptions.NotFound: The load balancer was not"},{"line_number":1132,"context_line":"                                                    found."}],"source_content_type":"text/x-python","patch_set":7,"id":"6c27a81a_73aa09fe","line":1129,"range":{"start_line":1129,"start_character":8,"end_line":1129,"end_character":64},"updated":"2023-10-25 16:31:25.000000000","message":"we should probably add the new param in the docstring","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"        Note: This expects the load balancer to already be in"},{"line_number":1127,"context_line":"        provisioning_status\u003dPENDING_UPDATE state."},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        :param load_balancer_id: ID for load balancer to failover"},{"line_number":1130,"context_line":"        :returns: None"},{"line_number":1131,"context_line":"        :raises octavia.commom.exceptions.NotFound: The load balancer was not"},{"line_number":1132,"context_line":"                                                    found."}],"source_content_type":"text/x-python","patch_set":7,"id":"b3e1c658_3518d5d9","line":1129,"range":{"start_line":1129,"start_character":8,"end_line":1129,"end_character":64},"in_reply_to":"6c27a81a_73aa09fe","updated":"2023-11-03 15:22:00.000000000","message":"Good point, I forgot","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"ce9cf29b0a961799aafd9e06777ab4a8a2b5ac14","unresolved":true,"context_lines":[{"line_number":1170,"context_line":"            else:"},{"line_number":1171,"context_line":"                flavor \u003d {constants.LOADBALANCER_TOPOLOGY: lb.topology}"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"            if resize_flavor_id !\u003d \"\":"},{"line_number":1174,"context_line":"                LOG.info(\u0027Failover in resize mode. \u0027 + resize_flavor_id)"},{"line_number":1175,"context_line":"                flavor \u003d self._flavor_repo.get_flavor_metadata_dict("},{"line_number":1176,"context_line":"                    db_apis.get_session(), resize_flavor_id)"},{"line_number":1177,"context_line":"                flavor[constants.LOADBALANCER_TOPOLOGY] \u003d lb.topology"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"            if lb:"},{"line_number":1180,"context_line":"                provider_lb_dict \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"8e5f6a30_7ef793f7","line":1177,"range":{"start_line":1173,"start_character":12,"end_line":1177,"end_character":69},"updated":"2023-10-25 16:31:25.000000000","message":"so if we have a resize_flavor_id, can we skip lines #1165-1171? looks like we override it if resize_flavor_id !\u003d \"\"\nI wonder about the other instances of flavor that appear here (is there any difference between \"flavor\" and \"resize_flavor_id\" after line 1177?)","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"be9ccdfca51768930468e57c04d19992b8d496c3","unresolved":false,"context_lines":[{"line_number":1170,"context_line":"            else:"},{"line_number":1171,"context_line":"                flavor \u003d {constants.LOADBALANCER_TOPOLOGY: lb.topology}"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"            if resize_flavor_id !\u003d \"\":"},{"line_number":1174,"context_line":"                LOG.info(\u0027Failover in resize mode. \u0027 + resize_flavor_id)"},{"line_number":1175,"context_line":"                flavor \u003d self._flavor_repo.get_flavor_metadata_dict("},{"line_number":1176,"context_line":"                    db_apis.get_session(), resize_flavor_id)"},{"line_number":1177,"context_line":"                flavor[constants.LOADBALANCER_TOPOLOGY] \u003d lb.topology"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"            if lb:"},{"line_number":1180,"context_line":"                provider_lb_dict \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1126c0c8_1b9b4d3d","line":1177,"range":{"start_line":1173,"start_character":12,"end_line":1177,"end_character":69},"in_reply_to":"8e5f6a30_7ef793f7","updated":"2023-11-03 15:22:00.000000000","message":"I\u0027ve changed the logic a little so that everything is in a single DB call.\n\nAnd I\u0027ve just overloaded the flavor variable for the rest of the workflow.","commit_id":"e3c452ac8ed8c131811ca4603a9e3b0197350698"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":1120,"context_line":"                  \u0027failover.\u0027, load_balancer.topology)"},{"line_number":1121,"context_line":"        raise exceptions.InvalidTopology(topology\u003dload_balancer.topology)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"    def failover_loadbalancer(self, load_balancer_id, resize_flavor_id\u003d\"\"):"},{"line_number":1124,"context_line":"        \"\"\"Perform failover operations for a load balancer."},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        Note: This expects the load balancer to already be in"}],"source_content_type":"text/x-python","patch_set":9,"id":"bd61ddb7_9149ae8e","line":1123,"range":{"start_line":1123,"start_character":71,"end_line":1123,"end_character":73},"updated":"2023-11-17 09:48:21.000000000","message":"i\u0027m wondering if \u003dNone would be more appropriate\nanyway, is it really optional? shouldn\u0027t it be mandatory (so no default value)?","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                  \u0027failover.\u0027, load_balancer.topology)"},{"line_number":1121,"context_line":"        raise exceptions.InvalidTopology(topology\u003dload_balancer.topology)"},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"    def failover_loadbalancer(self, load_balancer_id, resize_flavor_id\u003d\"\"):"},{"line_number":1124,"context_line":"        \"\"\"Perform failover operations for a load balancer."},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"        Note: This expects the load balancer to already be in"}],"source_content_type":"text/x-python","patch_set":9,"id":"28cf82c2_e746269d","line":1123,"range":{"start_line":1123,"start_character":71,"end_line":1123,"end_character":73},"in_reply_to":"bd61ddb7_9149ae8e","updated":"2023-11-22 16:06:13.000000000","message":"Ture for the None.\nSince I\u0027m reusing the failover function, this parameter shouldn\u0027t be mandatory. Otherwise, all failover calls would have to use the flavor parameter.","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e0fa2aa45b81910277264dd9387bd20d588903d","unresolved":true,"context_lines":[{"line_number":1201,"context_line":"            flavor \u003d {}"},{"line_number":1202,"context_line":"            if lb.flavor_id or resize_flavor_id is not None:"},{"line_number":1203,"context_line":"                if resize_flavor_id is not None:"},{"line_number":1204,"context_line":"                    LOG.info(\u0027Failover in resize mode. \u0027 + resize_flavor_id)"},{"line_number":1205,"context_line":"                    flavor_id \u003d resize_flavor_id"},{"line_number":1206,"context_line":"                else:"},{"line_number":1207,"context_line":"                    flavor_id \u003d lb.flavor_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"cafbed28_cb99b785","line":1204,"range":{"start_line":1204,"start_character":29,"end_line":1204,"end_character":75},"updated":"2025-09-18 05:46:48.000000000","message":"I would prefer\n\n```\nLOG.info(\u0027Failover in resize mode for flavor %s\u0027, resize_flavor_id)\n```","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"}],"octavia/controller/worker/v2/tasks/database_tasks.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":3099,"context_line":""},{"line_number":3100,"context_line":"    def execute(self, loadbalancer, new_flavor_id):"},{"line_number":3101,"context_line":"        with db_apis.session().begin() as session:"},{"line_number":3102,"context_line":"            db_lb \u003d self.loadbalancer_repo.get(session, id\u003dloadbalancer)"},{"line_number":3103,"context_line":"            LOG.info(\"Updating flavor_id of load balancer %s from %s to %s\","},{"line_number":3104,"context_line":"                     loadbalancer,"},{"line_number":3105,"context_line":"                     db_lb.flavor_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"dc1c947d_9c944346","line":3102,"range":{"start_line":3102,"start_character":59,"end_line":3102,"end_character":71},"updated":"2023-11-17 09:48:21.000000000","message":"in our flows, \"loadbalancer\" is a dict, passing it to get(id\u003d) triggers an exception\n\nyou can either use loadbalancer[constanst.LOADBALANCER_ID] or loadbalancer_id (if you modify the flow to pass this ID instead of the dict.","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":3099,"context_line":""},{"line_number":3100,"context_line":"    def execute(self, loadbalancer, new_flavor_id):"},{"line_number":3101,"context_line":"        with db_apis.session().begin() as session:"},{"line_number":3102,"context_line":"            db_lb \u003d self.loadbalancer_repo.get(session, id\u003dloadbalancer)"},{"line_number":3103,"context_line":"            LOG.info(\"Updating flavor_id of load balancer %s from %s to %s\","},{"line_number":3104,"context_line":"                     loadbalancer,"},{"line_number":3105,"context_line":"                     db_lb.flavor_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ea9d9c3a_eb281d67","line":3102,"range":{"start_line":3102,"start_character":59,"end_line":3102,"end_character":71},"in_reply_to":"dc1c947d_9c944346","updated":"2023-11-22 16:06:13.000000000","message":"Acknowledged","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":3105,"context_line":"                     db_lb.flavor_id,"},{"line_number":3106,"context_line":"                     new_flavor_id)"},{"line_number":3107,"context_line":""},{"line_number":3108,"context_line":"            self.loadbalancer_repo.update(session, loadbalancer,"},{"line_number":3109,"context_line":"                                          flavor_id\u003dnew_flavor_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"40b2e018_e82e3cc2","line":3108,"range":{"start_line":3108,"start_character":51,"end_line":3108,"end_character":63},"updated":"2023-11-17 09:48:21.000000000","message":"same here","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":3105,"context_line":"                     db_lb.flavor_id,"},{"line_number":3106,"context_line":"                     new_flavor_id)"},{"line_number":3107,"context_line":""},{"line_number":3108,"context_line":"            self.loadbalancer_repo.update(session, loadbalancer,"},{"line_number":3109,"context_line":"                                          flavor_id\u003dnew_flavor_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"295e026f_3ff54f0e","line":3108,"range":{"start_line":3108,"start_character":51,"end_line":3108,"end_character":63},"in_reply_to":"40b2e018_e82e3cc2","updated":"2023-11-22 16:06:13.000000000","message":"Acknowledged","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e0fa2aa45b81910277264dd9387bd20d588903d","unresolved":true,"context_lines":[{"line_number":3146,"context_line":"    update the flavor of the load balancer."},{"line_number":3147,"context_line":"    \"\"\""},{"line_number":3148,"context_line":""},{"line_number":3149,"context_line":"    def execute(self, loadbalancer_id, new_flavor_id):"},{"line_number":3150,"context_line":"        with db_apis.session().begin() as session:"},{"line_number":3151,"context_line":"            db_lb \u003d self.loadbalancer_repo.get(session, id\u003dloadbalancer_id)"},{"line_number":3152,"context_line":"            LOG.info(\"Updating flavor_id of load balancer %s from %s to %s\","}],"source_content_type":"text/x-python","patch_set":13,"id":"fcf54f00_512773e6","line":3149,"range":{"start_line":3149,"start_character":8,"end_line":3149,"end_character":15},"updated":"2025-09-18 05:46:48.000000000","message":"should we had a revert method that resets the flavor_id in case the resizing doesn\u0027t work?\nor should we keep a potentially non-applied flavor and expect that an admin performs a failover?","commit_id":"34533cf8c5b3816a1f88079bddeaf45bb98fe977"}],"octavia/policies/loadbalancer.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3e2ce6dc0ed46729fdd6da784aa4fcd3ca86efdd","unresolved":true,"context_lines":[{"line_number":90,"context_line":"                                    action\u003dconstants.RBAC_POST_RESIZE),"},{"line_number":91,"context_line":"        constants.RULE_API_ADMIN,"},{"line_number":92,"context_line":"        \"Resize a Load Balancer\","},{"line_number":93,"context_line":"        [{\u0027method\u0027: \u0027POST\u0027,"},{"line_number":94,"context_line":"          \u0027path\u0027: \u0027/v2/lbaas/loadbalancers/{loadbalancer_id}/resize\u0027}]"},{"line_number":95,"context_line":"    ),"},{"line_number":96,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":9,"id":"46a2e03b_fd01527e","line":93,"range":{"start_line":93,"start_character":21,"end_line":93,"end_character":25},"updated":"2023-11-17 09:48:21.000000000","message":"PUT?","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"},{"author":{"_account_id":33408,"name":"Pierre-Yves Jourel","email":"pierre-yves.jourel@ovhcloud.com","username":"PYJ"},"change_message_id":"c092f0a592e6d1b5e96032226e875b39cce5abb3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                                    action\u003dconstants.RBAC_POST_RESIZE),"},{"line_number":91,"context_line":"        constants.RULE_API_ADMIN,"},{"line_number":92,"context_line":"        \"Resize a Load Balancer\","},{"line_number":93,"context_line":"        [{\u0027method\u0027: \u0027POST\u0027,"},{"line_number":94,"context_line":"          \u0027path\u0027: \u0027/v2/lbaas/loadbalancers/{loadbalancer_id}/resize\u0027}]"},{"line_number":95,"context_line":"    ),"},{"line_number":96,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7fc449b4_7e691396","line":93,"range":{"start_line":93,"start_character":21,"end_line":93,"end_character":25},"in_reply_to":"46a2e03b_fd01527e","updated":"2023-11-22 16:06:13.000000000","message":"Acknowledged","commit_id":"7d97eb11fe8c629e099da891505af6972e1b87e3"}],"octavia/tests/functional/api/v2/test_load_balancer.py":[{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"814e775b5bc03977167e9b2186e422fa1f680ac5","unresolved":true,"context_lines":[{"line_number":2461,"context_line":"    def test_resize(self, mock_get_driver, mock_call_provider):"},{"line_number":2462,"context_line":"        mock_driver \u003d mock.MagicMock()"},{"line_number":2463,"context_line":"        mock_driver.name \u003d \u0027noop_driver\u0027"},{"line_number":2464,"context_line":"        mock_get_driver.return_value \u003d mock_driver"},{"line_number":2465,"context_line":""},{"line_number":2466,"context_line":"        project_id \u003d uuidutils.generate_uuid()"},{"line_number":2467,"context_line":"        lb \u003d self.create_load_balancer(uuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"a9153637_5fbac98e","line":2464,"updated":"2026-04-13 09:00:04.000000000","message":"Need to mock the provider as well\n\n```suggestion\n        mock_get_driver.return_value \u003d mock_driver\n        mock_call_provider.return_value \u003d (mock.MagicMock(), [])\n\n```","commit_id":"7f6098361feea5ba3de03871b76a85e1e21db659"},{"author":{"_account_id":38562,"name":"Richard Cruise","email":"rcruise@redhat.com","username":"rcruise"},"change_message_id":"814e775b5bc03977167e9b2186e422fa1f680ac5","unresolved":true,"context_lines":[{"line_number":2481,"context_line":"        self.put(self.LB_PATH.format(lb_id\u003dlb_dict.get(\u0027id\u0027)) + \"/resize\","},{"line_number":2482,"context_line":"                 {\u0027new_flavor_id\u0027: flavor.get(\u0027id\u0027)}, status\u003d202)"},{"line_number":2483,"context_line":""},{"line_number":2484,"context_line":"        mock_get_driver.assert_called_once_with(\u0027noop_driver\u0027)"},{"line_number":2485,"context_line":"        mock_call_provider.assert_has_calls(["},{"line_number":2486,"context_line":"            mock.call(\u0027noop_driver\u0027, mock_driver.validate_flavor,"},{"line_number":2487,"context_line":"                      {constants.LOADBALANCER_TOPOLOGY:"}],"source_content_type":"text/x-python","patch_set":16,"id":"b176a201_712204a2","line":2484,"updated":"2026-04-13 09:00:04.000000000","message":"Change the assertion, the driver gets called more than once\n\n```suggestion\n        mock_get_driver.assert_called_with(\u0027noop_driver\u0027)\n```","commit_id":"7f6098361feea5ba3de03871b76a85e1e21db659"}],"releasenotes/notes/add-resize-support-1c99e4aa53da1fc8.yaml":[{"author":{"_account_id":16707,"name":"Mohankumar","email":"nmohankumar1011@gmail.com","username":"mohankumar_n"},"change_message_id":"f916fb710aa2df16b3678e0c1c1a01f29d1bf46a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added possibility to change flavor of a load balancer already deploy."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"65b6b0f6_749378a3","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":73},"updated":"2023-08-01 16:31:48.000000000","message":"Add the option to change the flavor of a load balancer that has already been deployed.","commit_id":"3826ecea09abcb01728c2021020557145d7f11fb"}]}
