)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"980be55354b4199b839f7631324fd666039adc31","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f8c8d8d3_caff9353","updated":"2026-05-11 09:37:07.000000000","message":"Hi. My patch is probably wrong because of what\u0027s been pointed out: objects.ServiceList.get_all() is supposed to return only active and enabled services. However, we do have a serious bug here, because that\u0027s unfortunately not working. In production, we did see Cinder targeting volume services that were disabled. It\u0027d be nice if this could be investigated by the team.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"f702a8ab00790ea99f3352ccf975b1e1b5384244","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"00eebdd5_6d6f59b9","updated":"2026-05-12 12:56:30.000000000","message":"I tried to reproduce this issue on my test env and I couldn\u0027t.\n\nVolume creation requests were never delegated to the disabled cinder-volume service.\n\nPotentially, some special conditions need to be met in order to reproduce the problem.\n\n\nHowever, I did face an issue with disabling cinder-volume services.\nEven though API call was returning 200, it wasn\u0027t really disabling the service.\nEventually I had to disable the service directly in cinder.services table.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"733e73c421447d2f3e44b33d3ac2862db38b7e03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c1d562df_76f314cb","updated":"2026-03-25 12:44:05.000000000","message":"They change looks okay, but I added an improvements suggestion.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"733e73c421447d2f3e44b33d3ac2862db38b7e03","unresolved":true,"context_lines":[{"line_number":692,"context_line":"        no_capabilities_backends \u003d set()"},{"line_number":693,"context_line":"        for service in volume_services.objects:"},{"line_number":694,"context_line":"            host \u003d service.host"},{"line_number":695,"context_line":"            if not service.is_up:"},{"line_number":696,"context_line":"                LOG.warning(\"volume service is down. (host: %s)\", host)"},{"line_number":697,"context_line":"                continue"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3303b5d6_e8ba3a3f","line":695,"updated":"2026-03-25 12:44:05.000000000","message":"Can you merge your fix to this if?\n```\n  if not service.is_up or service.disabled:\n      LOG.warning(\"volume service down or disabled. (host: %s)\", host)\n```","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"5e96792b1635bb4e496074e786bc227ec8e242f8","unresolved":false,"context_lines":[{"line_number":692,"context_line":"        no_capabilities_backends \u003d set()"},{"line_number":693,"context_line":"        for service in volume_services.objects:"},{"line_number":694,"context_line":"            host \u003d service.host"},{"line_number":695,"context_line":"            if not service.is_up:"},{"line_number":696,"context_line":"                LOG.warning(\"volume service is down. (host: %s)\", host)"},{"line_number":697,"context_line":"                continue"},{"line_number":698,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2b619e7b_e26ba44c","line":695,"in_reply_to":"3303b5d6_e8ba3a3f","updated":"2026-03-27 08:09:34.000000000","message":"No, I prefer the way I did, so we can log differently if the service is down or disabled.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"62206690e8e1faccfb7d7367946a726334055fe3","unresolved":true,"context_lines":[{"line_number":696,"context_line":"                LOG.warning(\"volume service is down. (host: %s)\", host)"},{"line_number":697,"context_line":"                continue"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"            if service.disabled:"},{"line_number":700,"context_line":"                LOG.warning(\"volume service is disabled. (host: %s)\", host)"},{"line_number":701,"context_line":"                continue"},{"line_number":702,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7af2be6e_d0b0be44","line":699,"updated":"2026-04-21 14:44:47.000000000","message":"Didn\u0027t we call ServiceList.get_all with disabled: False above? Will this ever be true?","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"0c8e65e6779060164f5e1de8764cbd696f4cae21","unresolved":true,"context_lines":[{"line_number":696,"context_line":"                LOG.warning(\"volume service is down. (host: %s)\", host)"},{"line_number":697,"context_line":"                continue"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"            if service.disabled:"},{"line_number":700,"context_line":"                LOG.warning(\"volume service is disabled. (host: %s)\", host)"},{"line_number":701,"context_line":"                continue"},{"line_number":702,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c8d82915_4df35ba1","line":699,"in_reply_to":"7af2be6e_d0b0be44","updated":"2026-04-22 05:38:52.000000000","message":"small window of possibility... ServiceList.get_all(disabled\u003dFalse) filters correctly at SQL level for this cycle and backend_state_map is a persistent in-memory dict that accumulates entries across in scheduler cycles.\nA service disabled between cycles will no longer appear in SQL results, but its stale entry remains in state_map from the previous cycle and the scheduler will keep sending jobs to it.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ca58f5d43103db7626819549fbecc3f4231bfd4b","unresolved":true,"context_lines":[{"line_number":696,"context_line":"                LOG.warning(\"volume service is down. (host: %s)\", host)"},{"line_number":697,"context_line":"                continue"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"            if service.disabled:"},{"line_number":700,"context_line":"                LOG.warning(\"volume service is disabled. (host: %s)\", host)"},{"line_number":701,"context_line":"                continue"},{"line_number":702,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e96bb456_71ee6e8c","line":699,"in_reply_to":"c8d82915_4df35ba1","updated":"2026-04-27 18:53:15.000000000","message":"I think the stale entries from the previous cycle are removed after this loop is completed, namely at lines 735-744 ... or am i misunderstanding your point?","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"}],"cinder/tests/unit/scheduler/test_host_manager.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5306e2e4672261c87f5b7738a2e5ae734adbca60","unresolved":true,"context_lines":[{"line_number":755,"context_line":"    @mock.patch(\u0027cinder.db.service_get_all\u0027)"},{"line_number":756,"context_line":"    @mock.patch(\u0027cinder.objects.service.Service.is_up\u0027,"},{"line_number":757,"context_line":"                new_callable\u003dmock.PropertyMock)"},{"line_number":758,"context_line":"    def test_get_all_backend_states(self, _mock_service_is_up,"},{"line_number":759,"context_line":"                                    _mock_service_get_all):"},{"line_number":760,"context_line":"        context \u003d \u0027fake_context\u0027"},{"line_number":761,"context_line":"        timestamp \u003d datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":1,"id":"20172704_67dfb078","line":758,"updated":"2026-04-21 15:04:10.000000000","message":"Maybe this test can be modified to include a disabled host.","commit_id":"86ff5183a5d219e12eaefe86861f53e81d147873"}]}
