diff --git a/cinder/volume/api.py b/cinder/volume/api.py index 3d3f9429c..e28a3e9d4 100644 --- a/cinder/volume/api.py +++ b/cinder/volume/api.py @@ -1593,9 +1593,10 @@ class API(base.Base): ctxt = context.get_admin_context() svc_host = volume_utils.extract_host(host, 'backend') - service = objects.Service.get_by_host_and_topic( + service = objects.Service.get_by_args( ctxt, svc_host, CONF.volume_topic) - expected = {'replication_status': fields.ReplicationStatus.ENABLED} + expected = {'replication_status': [fields.ReplicationStatus.ENABLED, + fields.ReplicationStatus.FAILED_OVER]} result = service.conditional_update( {'replication_status': fields.ReplicationStatus.FAILING_OVER}, expected) diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py index 3bb833000..2dbb6394f 100644 --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@ -3296,11 +3296,19 @@ class VolumeManager(manager.SchedulerDependentManager): secondary_backend_id}) return None - service.replication_status = fields.ReplicationStatus.FAILED_OVER - service.active_backend_id = active_backend_id - service.disabled = True - service.disabled_reason = "failed-over" - service.save() + if secondary_backend_id == "default": + service.replication_status = fields.ReplicationStatus.ENABLED + service.active_backend_id = "" + service.disabled = False + service.disabled_reason = "" + service.save() + + else: + service.replication_status = fields.ReplicationStatus.FAILED_OVER + service.active_backend_id = active_backend_id + service.disabled = True + service.disabled_reason = "failed-over" + service.save() for update in volume_update_list: # Response must include an id key: {volume_id: }