]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: ns update route robustness 61999/head
authorTomer Haskalovitch <il033030@Tomers-MBP.lan>
Thu, 30 Jan 2025 09:09:13 +0000 (11:09 +0200)
committerTomer Haskalovitch <il033030@Tomers-MBP.lan>
Tue, 25 Feb 2025 18:14:03 +0000 (20:14 +0200)
improve namespace update endpoint

fixes: https://tracker.ceph.com/issues/62705

Signed-off-by: Tomer Haskalovitch <il033030@Tomers-MBP.lan>
(cherry picked from commit 649f33777dda810191c50457e74cdf29ed6c99fb)

src/pybind/mgr/dashboard/controllers/nvmeof.py

index f199867943d14c9a7e4c1d027839867cd7e4dae9..329c838f1b36c6bc617dfe59923f9682cf442804 100644 (file)
@@ -2,6 +2,7 @@
 import logging
 from typing import Any, Dict, Optional
 
+import cherrypy
 from orchestrator import OrchestratorError
 
 from .. import mgr
@@ -296,7 +297,7 @@ else:
                 "gw_group": Param(str, "NVMeoF gateway group", True, None),
             },
         )
-        @empty_response
+        @map_model(model.Namespace, first="namespaces")
         @handle_nvmeof_error
         def update(
             self,
@@ -310,34 +311,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),
@@ -347,9 +346,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(