)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"35278d06eb30f392f924ed3fd4d099d21a742113","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"210bcefb_0d40f061","updated":"2026-02-02 16:05:32.000000000","message":"Hello, guys!\n\nCan you please take a look at this patch.\nRecently we had an unfortunate test run which produced 80+ trove\ninstances in ERROR state. Querying them with ``instance list`` method\nreturned 504 errors.\nAfter digging in, I also figured out that trove do query to nova,\ngetting ALL of the servers. This is a very bad behavior, because\nservice project may contain servers from another projects like\nOctavia\u0027s load balancers.\nNova tags feature was released 8 years ago, and we don\u0027t utilize it yet\nin trove.\nAlso I added pagination support for GET mgmt/instances, I think it will\nbe crucial for large OpenStack setups.","commit_id":"b0d04400b59c8b9d4f391f319c047a9c9613c6db"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"451e9019436408f16cfe6d48a2631d4186955daa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1a27895c_97dc7835","updated":"2026-02-05 11:52:39.000000000","message":"recheck","commit_id":"b0d04400b59c8b9d4f391f319c047a9c9613c6db"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"c12e29459b54e2275194bdeba33c83c1a50e0cfa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4a54c221_bce7d258","updated":"2026-02-07 18:16:57.000000000","message":"recheck","commit_id":"b0d04400b59c8b9d4f391f319c047a9c9613c6db"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"8b313158c6c0e48050cd32971753e6204abea69f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7bfd0d7c_5e97ebbd","in_reply_to":"210bcefb_0d40f061","updated":"2026-02-04 01:50:45.000000000","message":"ok，I will add the patch to my review list","commit_id":"b0d04400b59c8b9d4f391f319c047a9c9613c6db"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"035d379ad79fbbf8e92909924aa2988c3a05640b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7be6cbf3_af3c34f4","updated":"2026-03-06 21:53:22.000000000","message":"@wchy1001@gmail.com Hello Wu, sorry for touch you, please look this MR, I think, we need merge it in current cycle.","commit_id":"7afde553050a5bd07702e58874a07ed10d5302c9"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"d5698bbeb2a1e383210e2c424948d4e8cc0fa686","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b434a312_69a3abfe","in_reply_to":"7be6cbf3_af3c34f4","updated":"2026-03-09 08:05:41.000000000","message":"ok, No problem, I will review it ASAP.","commit_id":"7afde553050a5bd07702e58874a07ed10d5302c9"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"91fb2433f26d8272faa9992b8a7ea7e33a09a6ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9bd6cded_550c6bcf","updated":"2026-04-09 12:54:12.000000000","message":"@wchy1001@gmail.com hello, please look it again.","commit_id":"7a2cb21e8b3035835ae1260c9c7e676191360562"}],"trove/cmd/manage.py":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"97d23d77da585ddc5a96847fcc4a8f554e17d702","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        except Exception as e:"},{"line_number":212,"context_line":"            print(e)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def set_nova_tags(self):"},{"line_number":215,"context_line":"        \"\"\"Set tags to nova servers for ALL existing db instances.\"\"\""},{"line_number":216,"context_line":"        self.db_api.configure_db()"},{"line_number":217,"context_line":"        admin_context \u003d TroveContext("},{"line_number":218,"context_line":"            user_id\u003dCONF.service_credentials.username,"},{"line_number":219,"context_line":"            project_id\u003dCONF.service_credentials.project_id,"},{"line_number":220,"context_line":"            user_domain_name\u003dCONF.service_credentials.user_domain_name)"},{"line_number":221,"context_line":"        nova_client \u003d clients.create_nova_client(admin_context)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        if nova_client.api_version \u003c api_versions.APIVersion(\u00272.26\u0027):"},{"line_number":224,"context_line":"            raise SystemExit(_(\"Minimal Nova API version 2.26 is required.\"))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        def _set_server_tags(server):"},{"line_number":227,"context_line":"            tags \u003d [\u0027trove_instance\u0027] + ["},{"line_number":228,"context_line":"                f\"{key}_{value}\" for key, value in server.metadata.items()]"},{"line_number":229,"context_line":"            try:"},{"line_number":230,"context_line":"                # Remove all existing tags for idempotency"},{"line_number":231,"context_line":"                nova_client.servers.delete_all_tags(server.id)"},{"line_number":232,"context_line":"            except Exception as e:"},{"line_number":233,"context_line":"                print(e)"},{"line_number":234,"context_line":"            nova_client.servers.set_tags(server.id, tags)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        for instance in DBInstance.find_all(deleted\u003dFalse).all():"},{"line_number":237,"context_line":"            if instance.compute_instance_id:"},{"line_number":238,"context_line":"                try:"},{"line_number":239,"context_line":"                    server \u003d nova_client.servers.get("},{"line_number":240,"context_line":"                        instance.compute_instance_id)"},{"line_number":241,"context_line":"                    _set_server_tags(server)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"                    print(\"Tags were updated for instance: %s\" % server.id)"},{"line_number":244,"context_line":"                except Exception as e:"},{"line_number":245,"context_line":"                    print(e)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def params_of(self, command_name):"},{"line_number":248,"context_line":"        if Commands.has(command_name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"77827da5_47907642","line":245,"range":{"start_line":214,"start_character":0,"end_line":245,"end_character":28},"updated":"2026-03-15 06:02:56.000000000","message":"Hello, the code looks good to me. However, users have to run `trove-manage set_nova_tags` manually, which is not executed by default in most deployments. For reference, see the example in the [Kolla deployment](https://github.com/openstack/kolla/blob/master/docker/trove/trove-api/extend_start.sh#L6).\n\nConsidering this, I prefer to invoke this function from the `db_sync` and `db_upgrade` functions, so that most deployments can work properly without requiring special changes. Additionally, we need to make this function idempotent. Instead of removing all tags (which could cause issues if users or deployment tools run this script twice across different OpenStack cycles), I suggest checking one of the servers to see if the \u0027trove_instance\u0027 tags already exist. If they do, it indicates that this script has already been run.","commit_id":"7afde553050a5bd07702e58874a07ed10d5302c9"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"edc73c00696ef0860c41634caf7b7e374bb812e0","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        except Exception as e:"},{"line_number":212,"context_line":"            print(e)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def set_nova_tags(self):"},{"line_number":215,"context_line":"        \"\"\"Set tags to nova servers for ALL existing db instances.\"\"\""},{"line_number":216,"context_line":"        self.db_api.configure_db()"},{"line_number":217,"context_line":"        admin_context \u003d TroveContext("},{"line_number":218,"context_line":"            user_id\u003dCONF.service_credentials.username,"},{"line_number":219,"context_line":"            project_id\u003dCONF.service_credentials.project_id,"},{"line_number":220,"context_line":"            user_domain_name\u003dCONF.service_credentials.user_domain_name)"},{"line_number":221,"context_line":"        nova_client \u003d clients.create_nova_client(admin_context)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        if nova_client.api_version \u003c api_versions.APIVersion(\u00272.26\u0027):"},{"line_number":224,"context_line":"            raise SystemExit(_(\"Minimal Nova API version 2.26 is required.\"))"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        def _set_server_tags(server):"},{"line_number":227,"context_line":"            tags \u003d [\u0027trove_instance\u0027] + ["},{"line_number":228,"context_line":"                f\"{key}_{value}\" for key, value in server.metadata.items()]"},{"line_number":229,"context_line":"            try:"},{"line_number":230,"context_line":"                # Remove all existing tags for idempotency"},{"line_number":231,"context_line":"                nova_client.servers.delete_all_tags(server.id)"},{"line_number":232,"context_line":"            except Exception as e:"},{"line_number":233,"context_line":"                print(e)"},{"line_number":234,"context_line":"            nova_client.servers.set_tags(server.id, tags)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        for instance in DBInstance.find_all(deleted\u003dFalse).all():"},{"line_number":237,"context_line":"            if instance.compute_instance_id:"},{"line_number":238,"context_line":"                try:"},{"line_number":239,"context_line":"                    server \u003d nova_client.servers.get("},{"line_number":240,"context_line":"                        instance.compute_instance_id)"},{"line_number":241,"context_line":"                    _set_server_tags(server)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"                    print(\"Tags were updated for instance: %s\" % server.id)"},{"line_number":244,"context_line":"                except Exception as e:"},{"line_number":245,"context_line":"                    print(e)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def params_of(self, command_name):"},{"line_number":248,"context_line":"        if Commands.has(command_name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"13fafe38_6859d8b9","line":245,"range":{"start_line":214,"start_character":0,"end_line":245,"end_character":28},"in_reply_to":"77827da5_47907642","updated":"2026-03-16 12:32:38.000000000","message":"Hello, Wu! Thank you for the review.\nYes, that\u0027s a good point. I didn\u0027t know about running ``db_sync`` in Kolla images.\nWe use k8s and usually run ``db_upgrade`` only on each release upgrade manually.\n\nI\u0027ve added a new method ``run_upgrade_tasks`` for non-SQL upgrades, and the ``_check_nova_tags_exists()`` method, which will prevent the script from running twice.\nAlso, I modified the code so it will not remove existing tags, only add trove-related, and you can force-run it too. It is fully idempotent now.\n\nI think this would be sufficient. How do you think?","commit_id":"7afde553050a5bd07702e58874a07ed10d5302c9"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"9faa56625f39cef2bf09b866bdb8daf83e4ed8c0","unresolved":true,"context_lines":[{"line_number":53,"context_line":"            print(\u0027Nova tags already present, skipping.\u0027)"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            print(\u0027Setting nova tags for existing trove nova instances.\u0027)"},{"line_number":56,"context_line":"            self.set_nova_tags()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Future upgrade tasks goes here."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"b17510a2_49cc89a6","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"updated":"2026-03-17 02:44:57.000000000","message":"In case `_check_nova_tags_exists` returns False because the compute instance has not been created yet, I prefer to call `self.set_nova_tags(force\u003dTrue)` here – the `set_nova_tags` function is already idempotent, so this is safe.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"68dd62f4267eb19eaf982a894e383a9aeffb7899","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            print(\u0027Nova tags already present, skipping.\u0027)"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            print(\u0027Setting nova tags for existing trove nova instances.\u0027)"},{"line_number":56,"context_line":"            self.set_nova_tags()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Future upgrade tasks goes here."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4bd6fe49_d385fd4c","line":56,"range":{"start_line":56,"start_character":12,"end_line":56,"end_character":32},"in_reply_to":"b17510a2_49cc89a6","updated":"2026-03-17 09:54:46.000000000","message":"Done","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"9faa56625f39cef2bf09b866bdb8daf83e4ed8c0","unresolved":true,"context_lines":[{"line_number":233,"context_line":"    def _check_nova_tags_exists(self):"},{"line_number":234,"context_line":"        self.db_api.configure_db()"},{"line_number":235,"context_line":"        check_instance \u003d DBInstance.get_by(deleted\u003dFalse)"},{"line_number":236,"context_line":"        if check_instance and check_instance.compute_instance_id:"},{"line_number":237,"context_line":"            server \u003d self._get_nova_client().servers.get("},{"line_number":238,"context_line":"                check_instance.compute_instance_id)"},{"line_number":239,"context_line":"            if \u0027trove_instance\u0027 in server.tags:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6523b92d_52edd4a4","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":65},"updated":"2026-03-17 02:44:57.000000000","message":"There may be an edge case where the Trove instance is in an Error state, but the compute instance was never created.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"68dd62f4267eb19eaf982a894e383a9aeffb7899","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def _check_nova_tags_exists(self):"},{"line_number":234,"context_line":"        self.db_api.configure_db()"},{"line_number":235,"context_line":"        check_instance \u003d DBInstance.get_by(deleted\u003dFalse)"},{"line_number":236,"context_line":"        if check_instance and check_instance.compute_instance_id:"},{"line_number":237,"context_line":"            server \u003d self._get_nova_client().servers.get("},{"line_number":238,"context_line":"                check_instance.compute_instance_id)"},{"line_number":239,"context_line":"            if \u0027trove_instance\u0027 in server.tags:"}],"source_content_type":"text/x-python","patch_set":4,"id":"6b586026_52c68c1c","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":65},"in_reply_to":"6523b92d_52edd4a4","updated":"2026-03-17 09:54:46.000000000","message":"Yes, that\u0027s possible. The problem was that querying with `LIMIT 1` and `IS NOT NULL` at the same time is not possible using existing methods from `DatabaseModelBase`, so I\u0027ve added `find_first` method.\nIMO, it may be handy in the future.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"d716390174e249f91a0ca0a610c11b8c5e1d4dec","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    def _check_nova_tags_exists(self):"},{"line_number":234,"context_line":"        self.db_api.configure_db()"},{"line_number":235,"context_line":"        check_instance \u003d DBInstance.get_by(deleted\u003dFalse)"},{"line_number":236,"context_line":"        if check_instance and check_instance.compute_instance_id:"},{"line_number":237,"context_line":"            server \u003d self._get_nova_client().servers.get("},{"line_number":238,"context_line":"                check_instance.compute_instance_id)"},{"line_number":239,"context_line":"            if \u0027trove_instance\u0027 in server.tags:"}],"source_content_type":"text/x-python","patch_set":4,"id":"b6d506cc_97ca111e","line":236,"range":{"start_line":236,"start_character":0,"end_line":236,"end_character":65},"in_reply_to":"6b586026_52c68c1c","updated":"2026-03-17 12:08:47.000000000","message":"make sense.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"02f17f30de6e0770c0861b4f860ae6122560a72d","unresolved":true,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"59ce95e1_5702a3ca","line":473,"updated":"2026-03-18 08:16:48.000000000","message":"2026.2","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"6ecdd68701397a1319ff1eef6716fe5d6e9e2907","unresolved":true,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"ed7313d3_2b36ceb5","line":473,"in_reply_to":"59ce95e1_5702a3ca","updated":"2026-03-18 13:01:51.000000000","message":"or remove this command， this is not needed any more.","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"5c81d12768b87c41d95f315e2d1f3bdfd16e7cba","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"e21aac87_b25f7e26","line":473,"in_reply_to":"ed7313d3_2b36ceb5","updated":"2026-04-09 10:29:21.000000000","message":"Done","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"6ecdd68701397a1319ff1eef6716fe5d6e9e2907","unresolved":true,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"},{"line_number":477,"context_line":"                 \u0027operation is idempotent and will keep existing tags.\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    cfg.custom_parser(\u0027action\u0027, actions)"},{"line_number":480,"context_line":"    cfg.parse_args(sys.argv)"}],"source_content_type":"text/x-python","patch_set":7,"id":"99243ecd_0ba576ce","line":477,"range":{"start_line":473,"start_character":0,"end_line":477,"end_character":72},"updated":"2026-03-18 13:01:51.000000000","message":"the same as the set_nova_tags command. users only need to upgrade trove normally now.","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"3f796d38ccb8c5119ca063b4665edfb8cbfecdca","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"},{"line_number":477,"context_line":"                 \u0027operation is idempotent and will keep existing tags.\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    cfg.custom_parser(\u0027action\u0027, actions)"},{"line_number":480,"context_line":"    cfg.parse_args(sys.argv)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3d2d28d0_207d8d7e","line":477,"range":{"start_line":473,"start_character":0,"end_line":477,"end_character":72},"in_reply_to":"089ba904_0c2bafd5","updated":"2026-03-26 06:39:34.000000000","message":"Acknowledged","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"6e26a05c2c8d4364051b592c5c5a556a78ed7434","unresolved":true,"context_lines":[{"line_number":470,"context_line":"            \u0027set_nova_tags\u0027,"},{"line_number":471,"context_line":"            description\u003d\u0027Set required tags for ALL nova servers in service \u0027"},{"line_number":472,"context_line":"                        \u0027project. Run this when upgrading from versions \u0027"},{"line_number":473,"context_line":"                        \u0027prior to 2026.1\u0027)"},{"line_number":474,"context_line":"        parser.add_argument("},{"line_number":475,"context_line":"            \u0027--force\u0027,"},{"line_number":476,"context_line":"            help\u003d\u0027Force setting nova tags, replacing existing tags. The \u0027"},{"line_number":477,"context_line":"                 \u0027operation is idempotent and will keep existing tags.\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    cfg.custom_parser(\u0027action\u0027, actions)"},{"line_number":480,"context_line":"    cfg.parse_args(sys.argv)"}],"source_content_type":"text/x-python","patch_set":7,"id":"089ba904_0c2bafd5","line":477,"range":{"start_line":473,"start_character":0,"end_line":477,"end_character":72},"in_reply_to":"99243ecd_0ba576ce","updated":"2026-03-18 14:06:09.000000000","message":"In some edge cases, if some network issues will occur during upgrade process, then not all of the Nova instances will be tagged, and there is no way of tagging them without this command.\nSo, probably keeping it will be a better option?","commit_id":"ff9fee2d47442da58715b2e07fa0572848e95b12"}],"trove/extensions/mgmt/instances/models.py":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"9faa56625f39cef2bf09b866bdb8daf83e4ed8c0","unresolved":true,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def __call__(self):"},{"line_number":309,"context_line":"        audit_start, audit_end \u003d NotificationTransformer._get_audit_period()"},{"line_number":310,"context_line":"        instances \u003d load_mgmt_instances(self.context, deleted\u003dFalse,"},{"line_number":311,"context_line":"                                        client\u003dself.nova_client)"},{"line_number":312,"context_line":"        messages \u003d []"},{"line_number":313,"context_line":"        for instance in filter("},{"line_number":314,"context_line":"                lambda inst: inst.status !\u003d \u0027SHUTDOWN\u0027 and inst.server,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7d4240bb_5b0b61b9","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":64},"updated":"2026-03-17 02:44:57.000000000","message":"now the `load_mgmt_instances` function returns `instances, marker`, I think this code also need to be updated. \nIn large deployment, I am considering if there is a slow query here though this function is not enabled by default.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"bb43abccffd0a403e459ba5a28ec058f92555b7e","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def __call__(self):"},{"line_number":309,"context_line":"        audit_start, audit_end \u003d NotificationTransformer._get_audit_period()"},{"line_number":310,"context_line":"        instances \u003d load_mgmt_instances(self.context, deleted\u003dFalse,"},{"line_number":311,"context_line":"                                        client\u003dself.nova_client)"},{"line_number":312,"context_line":"        messages \u003d []"},{"line_number":313,"context_line":"        for instance in filter("},{"line_number":314,"context_line":"                lambda inst: inst.status !\u003d \u0027SHUTDOWN\u0027 and inst.server,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8c4ddca7_083b5efd","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":64},"in_reply_to":"224ba789_6feda0da","updated":"2026-03-18 06:10:08.000000000","message":"This looks good to me now, but this PR should be merged in the next cycle.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"68dd62f4267eb19eaf982a894e383a9aeffb7899","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def __call__(self):"},{"line_number":309,"context_line":"        audit_start, audit_end \u003d NotificationTransformer._get_audit_period()"},{"line_number":310,"context_line":"        instances \u003d load_mgmt_instances(self.context, deleted\u003dFalse,"},{"line_number":311,"context_line":"                                        client\u003dself.nova_client)"},{"line_number":312,"context_line":"        messages \u003d []"},{"line_number":313,"context_line":"        for instance in filter("},{"line_number":314,"context_line":"                lambda inst: inst.status !\u003d \u0027SHUTDOWN\u0027 and inst.server,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b0173ae6_1bb90232","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":64},"in_reply_to":"7d4240bb_5b0b61b9","updated":"2026-03-17 09:54:46.000000000","message":"Oops, I missed this spot. Nice catch, thanks.\nLooks like this class isn\u0027t in use right now","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"70775f17434373028aacd9a01ebd8648f346ac47","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def __call__(self):"},{"line_number":309,"context_line":"        audit_start, audit_end \u003d NotificationTransformer._get_audit_period()"},{"line_number":310,"context_line":"        instances \u003d load_mgmt_instances(self.context, deleted\u003dFalse,"},{"line_number":311,"context_line":"                                        client\u003dself.nova_client)"},{"line_number":312,"context_line":"        messages \u003d []"},{"line_number":313,"context_line":"        for instance in filter("},{"line_number":314,"context_line":"                lambda inst: inst.status !\u003d \u0027SHUTDOWN\u0027 and inst.server,"}],"source_content_type":"text/x-python","patch_set":4,"id":"224ba789_6feda0da","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":64},"in_reply_to":"84d88f56_8b80e71b","updated":"2026-03-17 18:12:07.000000000","message":"After all, I think it’s better to keep the existing functionality unchanged, just in case if downstream patches use it.\n\nInstead, I added a `pagination\u003dFalse` parameter to the `load_mgmt_instances` method.\n\nAnother important update: added `trove_{datastore_name}` tag. This will be useful for the upcoming monitoring feature, which requires different monitoring ports for different datastores. The datastore-specific tag can be used to distinguish between them. We also need this tag for our internal release and monitoring task asap.","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"d716390174e249f91a0ca0a610c11b8c5e1d4dec","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def __call__(self):"},{"line_number":309,"context_line":"        audit_start, audit_end \u003d NotificationTransformer._get_audit_period()"},{"line_number":310,"context_line":"        instances \u003d load_mgmt_instances(self.context, deleted\u003dFalse,"},{"line_number":311,"context_line":"                                        client\u003dself.nova_client)"},{"line_number":312,"context_line":"        messages \u003d []"},{"line_number":313,"context_line":"        for instance in filter("},{"line_number":314,"context_line":"                lambda inst: inst.status !\u003d \u0027SHUTDOWN\u0027 and inst.server,"}],"source_content_type":"text/x-python","patch_set":4,"id":"84d88f56_8b80e71b","line":311,"range":{"start_line":310,"start_character":0,"end_line":311,"end_character":64},"in_reply_to":"b0173ae6_1bb90232","updated":"2026-03-17 12:08:47.000000000","message":"Yes, currently this function is not enabled by default. However, the original logic returns all instances, whereas now it only returns the first page of instances. This class is configured [here](https://github.com/openstack/trove/blob/master/trove/taskmanager/manager.py#L50). I checked the codebase and found there is no clear documentation indicating how to configure it, so I infer this should not be in use. Do you think we need to fix this?","commit_id":"965bc67c673bb811ead555f5458c2c37b02057d8"}]}
