From 92472a14b748dd8d81db1ef054c2ef011eff4b7f Mon Sep 17 00:00:00 2001 From: Gil Bregman Date: Wed, 18 Jun 2025 15:38:33 +0300 Subject: [PATCH] mgr/cephadm/nvmeof: Allow setting NVMEoF gateway read notifications interval in the spec file Fixes https://tracker.ceph.com/issues/71675 Signed-off-by: Gil Bregman (cherry picked from commit 6db984fc0e6d44161f26f5e8fb7eca50ac2451c9) --- .../cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 | 2 ++ src/pybind/mgr/cephadm/tests/test_services.py | 2 ++ src/python-common/ceph/deployment/service_spec.py | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 b/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 index 0664416bcb2c8..735979a548f09 100644 --- a/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 +++ b/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 @@ -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 }} diff --git a/src/pybind/mgr/cephadm/tests/test_services.py b/src/pybind/mgr/cephadm/tests/test_services.py index cb1aa8bc1ae9c..1792aee31e697 100644 --- a/src/pybind/mgr/cephadm/tests/test_services.py +++ b/src/pybind/mgr/cephadm/tests/test_services.py @@ -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""" diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index b2a089f50c00e..381f12bfb6a72 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -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, -- 2.39.5