]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm/nvmeof: Allow setting NVMEoF gateway read notifications interval in the... 64006/head
authorGil Bregman <gbregman@il.ibm.com>
Wed, 18 Jun 2025 12:38:33 +0000 (15:38 +0300)
committerGil Bregman <gbregman@il.ibm.com>
Wed, 18 Jun 2025 12:38:33 +0000 (15:38 +0300)
Fixes https://tracker.ceph.com/issues/71675

Signed-off-by: Gil Bregman <gbregman@il.ibm.com>
src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2
src/pybind/mgr/cephadm/tests/test_services.py
src/python-common/ceph/deployment/service_spec.py

index 0664416bcb2c8c6114ac626fce197c7b628576d7..735979a548f091bddcf89891200f527db1fe2cc2 100644 (file)
@@ -7,6 +7,7 @@ port = {{ spec.port }}
 enable_auth = {{ spec.enable_auth }}
 state_update_notify = {{ spec.state_update_notify }}
 state_update_interval_sec = {{ spec.state_update_interval_sec }}
+break_update_interval_sec = {{ spec.break_update_interval_sec }}
 enable_spdk_discovery_controller = {{ spec.enable_spdk_discovery_controller }}
 encryption_key = /encryption.key
 rebalance_period_sec = {{ spec.rebalance_period_sec }}
@@ -111,6 +112,7 @@ tgt_cmd_extra_args = {{ spec.tgt_cmd_extra_args }}
 iobuf_options = {{ iobuf_options }}
 {% endif %}
 qos_timeslice_in_usecs = {{ spec.qos_timeslice_in_usecs }}
+notifications_interval = {{ spec.notifications_interval }}
 
 [monitor]
 timeout = {{ spec.monitor_timeout }}
index cb1aa8bc1ae9c1e5ee970db20c7fdeb0a6a1bf75..1792aee31e6979ceba65851417b07038c39918ac 100644 (file)
@@ -356,6 +356,7 @@ port = {default_port}
 enable_auth = False
 state_update_notify = True
 state_update_interval_sec = 5
+break_update_interval_sec = 25
 enable_spdk_discovery_controller = False
 encryption_key = /encryption.key
 rebalance_period_sec = 7
@@ -430,6 +431,7 @@ transports = tcp
 transport_tcp_options = {{"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}}
 tgt_cmd_extra_args = {tgt_cmd_extra_args}
 qos_timeslice_in_usecs = 0
+notifications_interval = 60
 
 [monitor]
 timeout = 1.0\n"""
index b2a089f50c00ec35dcff2ce80a11164318e7e368..381f12bfb6a7235ad49bb169f5f4c8da80363c9e 100644 (file)
@@ -1378,6 +1378,7 @@ class NvmeofServiceSpec(ServiceSpec):
                  enable_auth: bool = False,
                  state_update_notify: Optional[bool] = True,
                  state_update_interval_sec: Optional[int] = 5,
+                 break_update_interval_sec: Optional[int] = 25,
                  enable_spdk_discovery_controller: Optional[bool] = False,
                  encryption_key: Optional[str] = None,
                  rebalance_period_sec: Optional[int] = 7,
@@ -1432,6 +1433,7 @@ class NvmeofServiceSpec(ServiceSpec):
                  tgt_cmd_extra_args: Optional[str] = None,
                  iobuf_options: Optional[Dict[str, int]] = None,
                  qos_timeslice_in_usecs: Optional[int] = 0,
+                 notifications_interval: Optional[int] = 60,
                  discovery_addr: Optional[str] = None,
                  discovery_addr_map: Optional[Dict[str, str]] = None,
                  discovery_port: Optional[int] = None,
@@ -1483,6 +1485,8 @@ class NvmeofServiceSpec(ServiceSpec):
         self.state_update_notify = state_update_notify
         #: ``state_update_interval_sec`` number of seconds to check for updates in OMAP
         self.state_update_interval_sec = state_update_interval_sec
+        #: ``break_update_interval_sec`` break updates longet than this interval to yield CPU
+        self.break_update_interval_sec = break_update_interval_sec
         #: ``enable_spdk_discovery_controller`` SPDK or ceph-nvmeof discovery service
         self.enable_spdk_discovery_controller = enable_spdk_discovery_controller
         #: ``encryption_key`` gateway encryption key
@@ -1597,6 +1601,8 @@ class NvmeofServiceSpec(ServiceSpec):
         self.iobuf_options: Optional[Dict[str, int]] = iobuf_options
         #: ``qos_timeslice_in_usecs`` timeslice for QOS code, in micro seconds
         self.qos_timeslice_in_usecs = qos_timeslice_in_usecs
+        #: ``notifications_interval`` read SPDK notifications interval, in seconds
+        self.notifications_interval = notifications_interval
         #: ``discovery_addr`` address of the discovery service
         self.discovery_addr = discovery_addr
         #: ``discovery_addr_map`` per node address map of the discovery service
@@ -1691,6 +1697,7 @@ class NvmeofServiceSpec(ServiceSpec):
                     ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'NOTICE'])
         self.verify_spdk_ceph_connection_allocation()
         verify_non_negative_int(self.qos_timeslice_in_usecs, "QOS timeslice")
+        verify_non_negative_int(self.notifications_interval, "SPDK notifications interval")
 
         verify_non_negative_number(self.spdk_ping_interval_in_seconds, "SPDK ping interval")
         if (
@@ -1708,6 +1715,7 @@ class NvmeofServiceSpec(ServiceSpec):
             raise SpecValidationError("Allowed consecutive SPDK ping failures should be at least 1")
 
         verify_non_negative_int(self.state_update_interval_sec, "State update interval")
+        verify_non_negative_int(self.break_update_interval_sec, "Break long updates interval")
         verify_non_negative_int(self.rebalance_period_sec, "Rebalance period")
         verify_non_negative_int(self.max_gws_in_grp, "Max gateways in group")
         verify_non_negative_int(self.max_ns_to_change_lb_grp,