From 649f33777dda810191c50457e74cdf29ed6c99fb Mon Sep 17 00:00:00 2001 From: Tomer Haskalovitch Date: Thu, 30 Jan 2025 11:09:13 +0200 Subject: [PATCH] mgr/dashboard: ns update route robustness improve namespace update endpoint fixes: https://tracker.ceph.com/issues/62705 Signed-off-by: Tomer Haskalovitch --- .../mgr/dashboard/controllers/nvmeof.py | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/nvmeof.py b/src/pybind/mgr/dashboard/controllers/nvmeof.py index d706e6b3fd17d..6e60b7126225b 100644 --- a/src/pybind/mgr/dashboard/controllers/nvmeof.py +++ b/src/pybind/mgr/dashboard/controllers/nvmeof.py @@ -2,6 +2,7 @@ import logging from typing import Any, Dict, Optional +import cherrypy from orchestrator import OrchestratorError from .. import mgr @@ -386,7 +387,7 @@ else: }, ) @NvmeofCLICommand("nvmeof ns update") - @empty_response + @map_model(model.Namespace, first="namespaces") @handle_nvmeof_error def update( self, @@ -400,34 +401,32 @@ else: w_mbytes_per_second: Optional[int] = None, gw_group: Optional[str] = None ): + contains_failure = False + if rbd_image_size: mib = 1024 * 1024 new_size_mib = int((rbd_image_size + mib - 1) / mib) - response = NVMeoFClient(gw_group=gw_group).stub.namespace_resize( + resp = NVMeoFClient(gw_group=gw_group).stub.namespace_resize( NVMeoFClient.pb2.namespace_resize_req( subsystem_nqn=nqn, nsid=int(nsid), new_size=new_size_mib ) ) - if response.status != 0: - return response + if resp.status != 0: + contains_failure = True if load_balancing_group: - response = NVMeoFClient().stub.namespace_change_load_balancing_group( + resp = NVMeoFClient().stub.namespace_change_load_balancing_group( NVMeoFClient.pb2.namespace_change_load_balancing_group_req( subsystem_nqn=nqn, nsid=int(nsid), anagrpid=load_balancing_group ) ) - if response.status != 0: - return response + if resp.status != 0: + contains_failure = True - if ( - rw_ios_per_second - or rw_mbytes_per_second - or r_mbytes_per_second - or w_mbytes_per_second - ): - response = NVMeoFClient().stub.namespace_set_qos_limits( + if rw_ios_per_second or rw_mbytes_per_second or r_mbytes_per_second \ + or w_mbytes_per_second: + resp = NVMeoFClient().stub.namespace_set_qos_limits( NVMeoFClient.pb2.namespace_set_qos_req( subsystem_nqn=nqn, nsid=int(nsid), @@ -437,9 +436,13 @@ else: w_mbytes_per_second=w_mbytes_per_second, ) ) - if response.status != 0: - return response - + if resp.status != 0: + contains_failure = True + response = NVMeoFClient(gw_group=gw_group).stub.list_namespaces( + NVMeoFClient.pb2.list_namespaces_req(subsystem=nqn, nsid=int(nsid)) + ) + if contains_failure: + cherrypy.response.status = 202 return response @EndpointDoc( -- 2.39.5