)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ca7b15f1a451a305cc315733be28f670e9069802","unresolved":true,"context_lines":[{"line_number":18,"context_line":"table and filtered by Service.is_up, mirroring the cinder-volume"},{"line_number":19,"context_line":"backend_state_map logic. The backup list now uses this map rather than"},{"line_number":20,"context_line":"raw cached capabilities, ensuring down services are excluded without"},{"line_number":21,"context_line":"duplicating liveness logic."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3cf2cfe359d3a6d658f1ee89ad3abc0bc52a50a4"},{"line_number":24,"context_line":"Signed-off-by: Damian Dabrowski \u003cdamian.dabrowski@cleura.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"f0be9147_2d1c110a","line":21,"updated":"2026-09-15 14:17:56.000000000","message":"Any bug id? please add Closes-Bug:","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":18,"context_line":"table and filtered by Service.is_up, mirroring the cinder-volume"},{"line_number":19,"context_line":"backend_state_map logic. The backup list now uses this map rather than"},{"line_number":20,"context_line":"raw cached capabilities, ensuring down services are excluded without"},{"line_number":21,"context_line":"duplicating liveness logic."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3cf2cfe359d3a6d658f1ee89ad3abc0bc52a50a4"},{"line_number":24,"context_line":"Signed-off-by: Damian Dabrowski \u003cdamian.dabrowski@cleura.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ad26b4f7_942dbf25","line":21,"in_reply_to":"f0be9147_2d1c110a","updated":"2026-10-08 18:19:50.000000000","message":"Done","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"860961bf0d5ea9f91f1920f4eed4e828faec7de6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"97b0c156_8c816986","updated":"2026-04-27 19:19:39.000000000","message":"This is similar to the code that\u0027s used for volumes (as opposed to backups), which is fine, but I want to mention that there\u0027s a patch up addressing a possible flaw in the volume code: https://review.opendev.org/c/openstack/cinder/+/979641\n\nThat patch is still under discussion, but you might want to take a look and see if you think the issue might apply here, since the code is so similar.","commit_id":"40d9b4dd5141bca2294626a3eca7d71bf83bc430"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"26f5deef34efe243edf18c56963018aacafca484","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5d73d86c_23eb77d3","updated":"2026-03-11 21:58:28.000000000","message":"recheck\n\n- cinder-plugin-ceph-tempest failed on: capture-performance-data: Generate statistics\n- devstack-plugin-nfs-tempest-full failed on tempest tests(a lot of `No valid backend was found. No weighed backends available` in logs)","commit_id":"40d9b4dd5141bca2294626a3eca7d71bf83bc430"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"b2362e4ea9154568ba0bd5f531a0c0a064bf8cb9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d5913593_52f58c55","in_reply_to":"97b0c156_8c816986","updated":"2026-05-12 13:41:49.000000000","message":"thanks, I looks like #979641 is invalid.\nDespite this, I tried to reproduce the issue mentioned there but I couldn\u0027t.","commit_id":"40d9b4dd5141bca2294626a3eca7d71bf83bc430"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a473d688c1e7d6bdf859c58eb94cd19175f0ed53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0fec4104_7e37340e","updated":"2026-09-10 22:08:35.000000000","message":"Code and tests LGTM.  There really should be \"Closes-bug #1901503\" in the commit message, and a release note, but if Damian isn\u0027t around, someone can add the release note as a followup.  I think the main thing at this point is to get this reviewed for RC-1.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b430edd360514cea339434472496d74537ec5ea0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6818fc2d_13fb5e2c","updated":"2026-09-10 22:06:00.000000000","message":"Note to reviewers: This patch addresses bug #1901503 (which has a duplicate, bug #2144863 ).  There are 3 patches posted addressing that bug, but I think this is the best one.  The others are:\n- https://review.opendev.org/c/openstack/cinder/+/982620\n- https://review.opendev.org/c/openstack/cinder/+/759786\n\nThe issue was first reported in 2020; we really need to get this fixed.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f8d308e44fbbad17401868251d8cac09c79db12e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c94a686d_be79beaa","updated":"2026-09-15 12:43:17.000000000","message":"Rajat makes some good points; dropping to a +1.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":25613,"name":"Keigo Noha","email":"knoha@redhat.com","username":"knoha"},"change_message_id":"5932d6c03178bc26853133b416fc376f1d15a0c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fa108689_43802b01","updated":"2026-09-01 05:21:29.000000000","message":"The patch works fine for me.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f9703f16c07ab5213baaeeb9619fff8b99aa4576","unresolved":true,"context_lines":[{"line_number":743,"context_line":"    def _update_backup_backend_state_map("},{"line_number":744,"context_line":"            self,"},{"line_number":745,"context_line":"            context: cinder_context.RequestContext) -\u003e None:"},{"line_number":746,"context_line":"        topic \u003d constants.BACKUP_TOPIC"},{"line_number":747,"context_line":"        services \u003d objects.ServiceList.get_all_by_topic("},{"line_number":748,"context_line":"            context, topic, disabled\u003dFalse)"},{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"}],"source_content_type":"text/x-python","patch_set":2,"id":"16a2266e_12817734","line":748,"range":{"start_line":746,"start_character":8,"end_line":748,"end_character":43},"updated":"2026-09-12 20:07:58.000000000","message":"should we use the generic services_get_all that allows the is_up filter?\n\n    services \u003d objects.ServiceList.get_all(\n        context,\n        {\n            \u0027topic\u0027: constants.BACKUP_TOPIC,\n            \u0027disabled\u0027: False,\n            \u0027is_up\u0027: True,\n        })","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ca7b15f1a451a305cc315733be28f670e9069802","unresolved":true,"context_lines":[{"line_number":743,"context_line":"    def _update_backup_backend_state_map("},{"line_number":744,"context_line":"            self,"},{"line_number":745,"context_line":"            context: cinder_context.RequestContext) -\u003e None:"},{"line_number":746,"context_line":"        topic \u003d constants.BACKUP_TOPIC"},{"line_number":747,"context_line":"        services \u003d objects.ServiceList.get_all_by_topic("},{"line_number":748,"context_line":"            context, topic, disabled\u003dFalse)"},{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7bc1a1ae_ab632b10","line":748,"range":{"start_line":746,"start_character":8,"end_line":748,"end_character":43},"in_reply_to":"16a2266e_12817734","updated":"2026-09-15 14:17:56.000000000","message":"+1,Backup selection only needs host names + capability fields (backend_state, driver_name, availability_zone). It does not need BackendState, pools, or a persistent filtered copy.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":743,"context_line":"    def _update_backup_backend_state_map("},{"line_number":744,"context_line":"            self,"},{"line_number":745,"context_line":"            context: cinder_context.RequestContext) -\u003e None:"},{"line_number":746,"context_line":"        topic \u003d constants.BACKUP_TOPIC"},{"line_number":747,"context_line":"        services \u003d objects.ServiceList.get_all_by_topic("},{"line_number":748,"context_line":"            context, topic, disabled\u003dFalse)"},{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"}],"source_content_type":"text/x-python","patch_set":2,"id":"03b7ab03_8485689d","line":748,"range":{"start_line":746,"start_character":8,"end_line":748,"end_character":43},"in_reply_to":"7bc1a1ae_ab632b10","updated":"2026-10-08 18:19:50.000000000","message":"Done","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f9703f16c07ab5213baaeeb9619fff8b99aa4576","unresolved":true,"context_lines":[{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"},{"line_number":752,"context_line":"            backend_key \u003d service.cluster_name or service.host"},{"line_number":753,"context_line":"            if not service.is_up:"},{"line_number":754,"context_line":"                LOG.warning(\"backup service is down. (host: %s)\", service.host)"},{"line_number":755,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"27415cbd_51b8275b","line":752,"range":{"start_line":752,"start_character":26,"end_line":752,"end_character":47},"updated":"2026-09-12 20:07:58.000000000","message":"we currently don\u0027t support A/A in backup so cluster_name should always be None for cinder-backup services.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ca7b15f1a451a305cc315733be28f670e9069802","unresolved":true,"context_lines":[{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"},{"line_number":752,"context_line":"            backend_key \u003d service.cluster_name or service.host"},{"line_number":753,"context_line":"            if not service.is_up:"},{"line_number":754,"context_line":"                LOG.warning(\"backup service is down. (host: %s)\", service.host)"},{"line_number":755,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"3cba37ad_d988439b","line":752,"range":{"start_line":752,"start_character":26,"end_line":752,"end_character":47},"in_reply_to":"27415cbd_51b8275b","updated":"2026-09-15 14:17:56.000000000","message":"+1,BackupAPI targets server\u003dbackup.host. Backup services do not register volume-style cluster queues. backend_key \u003d service.cluster_name or service.host plus tests that expect [\u0027clustered-backend\u0027] would schedule RPC to a name no backup manager consumes.\n\nBackup should use service.host only.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":749,"context_line":"        active_backends \u003d set()"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"},{"line_number":752,"context_line":"            backend_key \u003d service.cluster_name or service.host"},{"line_number":753,"context_line":"            if not service.is_up:"},{"line_number":754,"context_line":"                LOG.warning(\"backup service is down. (host: %s)\", service.host)"},{"line_number":755,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"c839da9f_43a9504a","line":752,"range":{"start_line":752,"start_character":26,"end_line":752,"end_character":47},"in_reply_to":"3cba37ad_d988439b","updated":"2026-10-08 18:19:50.000000000","message":"Done","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f9703f16c07ab5213baaeeb9619fff8b99aa4576","unresolved":true,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"},{"line_number":752,"context_line":"            backend_key \u003d service.cluster_name or service.host"},{"line_number":753,"context_line":"            if not service.is_up:"},{"line_number":754,"context_line":"                LOG.warning(\"backup service is down. (host: %s)\", service.host)"},{"line_number":755,"context_line":"                continue"},{"line_number":756,"context_line":"            # We only pay attention to the first up service of a cluster since"},{"line_number":757,"context_line":"            # they all refer to the same capabilities entry in"},{"line_number":758,"context_line":"            # backup_service_states."}],"source_content_type":"text/x-python","patch_set":2,"id":"f2033d03_f5527273","line":755,"range":{"start_line":753,"start_character":12,"end_line":755,"end_character":24},"updated":"2026-09-12 20:07:58.000000000","message":"this should be the first step in the loop, if service is not up, skip it","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        for service in services:"},{"line_number":752,"context_line":"            backend_key \u003d service.cluster_name or service.host"},{"line_number":753,"context_line":"            if not service.is_up:"},{"line_number":754,"context_line":"                LOG.warning(\"backup service is down. (host: %s)\", service.host)"},{"line_number":755,"context_line":"                continue"},{"line_number":756,"context_line":"            # We only pay attention to the first up service of a cluster since"},{"line_number":757,"context_line":"            # they all refer to the same capabilities entry in"},{"line_number":758,"context_line":"            # backup_service_states."}],"source_content_type":"text/x-python","patch_set":2,"id":"fff07d1f_b5ce9bad","line":755,"range":{"start_line":753,"start_character":12,"end_line":755,"end_character":24},"in_reply_to":"f2033d03_f5527273","updated":"2026-10-08 18:19:50.000000000","message":"marking as resolved because it\u0027s not relevant anymore(after we switched from `objects.ServiceList.get_all_by_topic()` to `objects.ServiceList.get_all()`","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"ca7b15f1a451a305cc315733be28f670e9069802","unresolved":true,"context_lines":[{"line_number":760,"context_line":"                continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"            capabilities \u003d self.backup_service_states.get(backend_key)"},{"line_number":763,"context_line":"            if capabilities is None:"},{"line_number":764,"context_line":"                continue"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"            self.backup_backend_state_map[backend_key] \u003d capabilities"}],"source_content_type":"text/x-python","patch_set":2,"id":"fc165f64_47690a5e","line":763,"updated":"2026-09-15 14:17:56.000000000","message":"if capabilities is None: continue logs nothing (up service, not yet reported -\u003e confusing ServiceNotFound).","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                continue"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"            capabilities \u003d self.backup_service_states.get(backend_key)"},{"line_number":763,"context_line":"            if capabilities is None:"},{"line_number":764,"context_line":"                continue"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"            self.backup_backend_state_map[backend_key] \u003d capabilities"}],"source_content_type":"text/x-python","patch_set":2,"id":"a3649f46_2d89d45a","line":763,"in_reply_to":"fc165f64_47690a5e","updated":"2026-10-08 18:19:50.000000000","message":"added log message for `if capabilities is None:`","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f9703f16c07ab5213baaeeb9619fff8b99aa4576","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        \"\"\""},{"line_number":1076,"context_line":"        services \u003d []"},{"line_number":1077,"context_line":"        ctxt \u003d cinder_context.get_admin_context()"},{"line_number":1078,"context_line":"        self._update_backup_backend_state_map(ctxt)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        def _is_good_service(cap, driver, az) -\u003e bool:"},{"line_number":1081,"context_line":"            if driver is None and az is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c8218058_7d53f03e","line":1078,"range":{"start_line":1078,"start_character":0,"end_line":1078,"end_character":51},"updated":"2026-09-12 20:07:58.000000000","message":"for every create backup operation, _list_backup_services is called which calls _update_backup_backend_state_map requiring to do a DB call for filtering backup services.\nPreviously we used to fetch the backup service map from cache but now it might impact performance if a large number of backup operations are launched simultaneously. have we done any performance testing to validate this does not bog down the service and won\u0027t cause any bottleneck?","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        \"\"\""},{"line_number":1076,"context_line":"        services \u003d []"},{"line_number":1077,"context_line":"        ctxt \u003d cinder_context.get_admin_context()"},{"line_number":1078,"context_line":"        self._update_backup_backend_state_map(ctxt)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        def _is_good_service(cap, driver, az) -\u003e bool:"},{"line_number":1081,"context_line":"            if driver is None and az is None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"00914cd4_f7931b0e","line":1078,"range":{"start_line":1078,"start_character":0,"end_line":1078,"end_character":51},"in_reply_to":"c8218058_7d53f03e","updated":"2026-10-08 18:19:50.000000000","message":"No dedicated perf tests were done. This mirrors the existing cinder-volume pattern (_update_backend_state_map also does one DB query per scheduling call), and it\u0027s a single filtered query against the services table, which stays small regardless of backup volume - so I\u0027d expect the same order of cost as the already-accepted volume path. Happy to do a quick benchmark if you have something specific in mind.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"}],"cinder/tests/unit/scheduler/test_host_manager.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"db214fd4c063223949066f99ab9770dcfae76e8f","unresolved":true,"context_lines":[{"line_number":1285,"context_line":"                \u0027get_all_by_topic\u0027)"},{"line_number":1286,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.cinder_context.\u0027"},{"line_number":1287,"context_line":"                \u0027get_admin_context\u0027)"},{"line_number":1288,"context_line":"    def test_list_backup_services_filters_down_services("},{"line_number":1289,"context_line":"            self, mock_get_admin_context, mock_get_all_by_topic):"},{"line_number":1290,"context_line":"        mock_get_admin_context.return_value \u003d mock.sentinel.context"},{"line_number":1291,"context_line":"        self.host_manager.backup_service_states \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"90e0bef9_c7738177","line":1288,"updated":"2026-04-08 15:24:03.000000000","message":"missing tests for capabilities is None and if backend_key in active_backends: continue. other wise LGTM","commit_id":"40d9b4dd5141bca2294626a3eca7d71bf83bc430"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"b2362e4ea9154568ba0bd5f531a0c0a064bf8cb9","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"                \u0027get_all_by_topic\u0027)"},{"line_number":1286,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.cinder_context.\u0027"},{"line_number":1287,"context_line":"                \u0027get_admin_context\u0027)"},{"line_number":1288,"context_line":"    def test_list_backup_services_filters_down_services("},{"line_number":1289,"context_line":"            self, mock_get_admin_context, mock_get_all_by_topic):"},{"line_number":1290,"context_line":"        mock_get_admin_context.return_value \u003d mock.sentinel.context"},{"line_number":1291,"context_line":"        self.host_manager.backup_service_states \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"bce38343_77fc005d","line":1288,"in_reply_to":"90e0bef9_c7738177","updated":"2026-05-12 13:41:49.000000000","message":"thanks, I added two tests:\n\n```\ncinder.tests.unit.scheduler.test_host_manager.HostManagerTestCase.test_update_backup_backend_state_map_skips_missing_capabilities\ncinder.tests.unit.scheduler.test_host_manager.HostManagerTestCase.test_update_backup_backend_state_map_skips_duplicate_backend\n```","commit_id":"40d9b4dd5141bca2294626a3eca7d71bf83bc430"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f9703f16c07ab5213baaeeb9619fff8b99aa4576","unresolved":true,"context_lines":[{"line_number":1317,"context_line":"        mock_get_all_by_topic.assert_called_once_with("},{"line_number":1318,"context_line":"            mock.sentinel.context, constants.BACKUP_TOPIC, disabled\u003dFalse)"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.objects.ServiceList.\u0027"},{"line_number":1321,"context_line":"                \u0027get_all_by_topic\u0027)"},{"line_number":1322,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.cinder_context.\u0027"},{"line_number":1323,"context_line":"                \u0027get_admin_context\u0027)"},{"line_number":1324,"context_line":"    def test_list_backup_services_matches_cluster_name("},{"line_number":1325,"context_line":"            self, mock_get_admin_context, mock_get_all_by_topic):"},{"line_number":1326,"context_line":"        mock_get_admin_context.return_value \u003d mock.sentinel.context"},{"line_number":1327,"context_line":"        self.host_manager.backup_service_states \u003d {"},{"line_number":1328,"context_line":"            \u0027clustered-backend\u0027: {\u0027backend_state\u0027: True},"},{"line_number":1329,"context_line":"        }"},{"line_number":1330,"context_line":"        services \u003d ["},{"line_number":1331,"context_line":"            mock.Mock(cluster_name\u003d\u0027clustered-backend\u0027,"},{"line_number":1332,"context_line":"                      host\u003d\u0027host1\u0027, is_up\u003dTrue),"},{"line_number":1333,"context_line":"        ]"},{"line_number":1334,"context_line":"        mock_get_all_by_topic.return_value \u003d services"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"        result \u003d self.host_manager._list_backup_services(None, driver\u003dNone)"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        self.assertEqual([\u0027clustered-backend\u0027], result)"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.objects.ServiceList.\u0027"},{"line_number":1341,"context_line":"                \u0027get_all_by_topic\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"726e62ca_f8ba124f","line":1338,"range":{"start_line":1320,"start_character":0,"end_line":1338,"end_character":55},"updated":"2026-09-12 20:07:58.000000000","message":"we don\u0027t support clustered backup service","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"0452828cbd90f82eadee21e224fc707f4f23ce38","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"        mock_get_all_by_topic.assert_called_once_with("},{"line_number":1318,"context_line":"            mock.sentinel.context, constants.BACKUP_TOPIC, disabled\u003dFalse)"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.objects.ServiceList.\u0027"},{"line_number":1321,"context_line":"                \u0027get_all_by_topic\u0027)"},{"line_number":1322,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.cinder_context.\u0027"},{"line_number":1323,"context_line":"                \u0027get_admin_context\u0027)"},{"line_number":1324,"context_line":"    def test_list_backup_services_matches_cluster_name("},{"line_number":1325,"context_line":"            self, mock_get_admin_context, mock_get_all_by_topic):"},{"line_number":1326,"context_line":"        mock_get_admin_context.return_value \u003d mock.sentinel.context"},{"line_number":1327,"context_line":"        self.host_manager.backup_service_states \u003d {"},{"line_number":1328,"context_line":"            \u0027clustered-backend\u0027: {\u0027backend_state\u0027: True},"},{"line_number":1329,"context_line":"        }"},{"line_number":1330,"context_line":"        services \u003d ["},{"line_number":1331,"context_line":"            mock.Mock(cluster_name\u003d\u0027clustered-backend\u0027,"},{"line_number":1332,"context_line":"                      host\u003d\u0027host1\u0027, is_up\u003dTrue),"},{"line_number":1333,"context_line":"        ]"},{"line_number":1334,"context_line":"        mock_get_all_by_topic.return_value \u003d services"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"        result \u003d self.host_manager._list_backup_services(None, driver\u003dNone)"},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        self.assertEqual([\u0027clustered-backend\u0027], result)"},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"    @mock.patch(\u0027cinder.scheduler.host_manager.objects.ServiceList.\u0027"},{"line_number":1341,"context_line":"                \u0027get_all_by_topic\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a11060a6_2aa2fab3","line":1338,"range":{"start_line":1320,"start_character":0,"end_line":1338,"end_character":55},"in_reply_to":"726e62ca_f8ba124f","updated":"2026-10-08 18:19:50.000000000","message":"Renamed to test_list_backup_services_ignores_cluster_name and flipped the assertion - it now asserts the backend is keyed by host, not cluster_name.","commit_id":"f409ca3461eb175c60b870f797bf74e7ca8f47ac"}]}
