From: Shweta Bhosale Date: Mon, 27 Apr 2026 11:43:10 +0000 (+0530) Subject: mgr/cephadm: Handle daemon colocation port for cluster qos port X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=55ed85efdfa53dd0a3a79331cd5f51839aa66123;p=ceph.git mgr/cephadm: Handle daemon colocation port for cluster qos port Fixes: https://tracker.ceph.com/issues/69861 Signed-off-by: Shweta Bhosale --- diff --git a/src/pybind/mgr/cephadm/services/nfs.py b/src/pybind/mgr/cephadm/services/nfs.py index 0307be5e189a..aef299ef6d2a 100644 --- a/src/pybind/mgr/cephadm/services/nfs.py +++ b/src/pybind/mgr/cephadm/services/nfs.py @@ -231,8 +231,8 @@ class NFSService(CephService): # generate the ganesha config rdma_port = None - if spec.enable_rdma and daemon_spec.ports and len(daemon_spec.ports) > 2: - rdma_port = daemon_spec.ports[2] + if spec.enable_rdma and daemon_spec.ports and len(daemon_spec.ports) > 3: + rdma_port = daemon_spec.ports[3] elif spec.enable_rdma: rdma_port = spec.rdma_port diff --git a/src/pybind/mgr/cephadm/tests/services/test_nfs.py b/src/pybind/mgr/cephadm/tests/services/test_nfs.py index ee65c87464e1..376fdea25e30 100644 --- a/src/pybind/mgr/cephadm/tests/services/test_nfs.py +++ b/src/pybind/mgr/cephadm/tests/services/test_nfs.py @@ -598,8 +598,8 @@ def test_nfs_colocation_ports_validation(): port=2049, monitoring_port=9587, colocation_ports=[ - {'data_port': 3049, 'monitoring_port': 9588}, - {'data_port': 4049, 'monitoring_port': 9589} + {'data_port': 3049, 'monitoring_port': 9588, 'cluster_qos_port': 31312}, + {'data_port': 4049, 'monitoring_port': 9589, 'cluster_qos_port': 31313} ] ) spec.validate() # Should not raise @@ -611,7 +611,7 @@ def test_nfs_colocation_ports_validation(): placement=PlacementSpec(count=4), port=2049, monitoring_port=9587, - colocation_ports=[{'data_port': 3049, 'monitoring_port': 9588}] + colocation_ports=[{'data_port': 3049, 'monitoring_port': 9588, 'cluster_qos_port': 31312}] ) spec.validate() assert "colocation_ports requires 3 entries for count=4 (got 1)" in str(e.value) @@ -625,7 +625,7 @@ def test_nfs_colocation_ports_validation(): monitoring_port=9587, colocation_ports=[ {'data_port': 3049}, # Missing monitoring_port - {'data_port': 4049, 'monitoring_port': 9589} + {'data_port': 4049, 'monitoring_port': 9589, 'cluster_qos_port': 31312} ] ) spec.validate() @@ -643,8 +643,8 @@ def test_nfs_colocation_ports_validation_with_rdma(): enable_rdma=True, rdma_port=20049, colocation_ports=[ - {'data_port': 3049, 'monitoring_port': 9588, 'rdma_port': 20050}, - {'data_port': 4049, 'monitoring_port': 9589, 'rdma_port': 20051}, + {'data_port': 3049, 'monitoring_port': 9588, 'cluster_qos_port': 31312, 'rdma_port': 20050}, + {'data_port': 4049, 'monitoring_port': 9589, 'cluster_qos_port': 31313, 'rdma_port': 20051}, ] ) spec.validate() @@ -658,8 +658,8 @@ def test_nfs_colocation_ports_validation_with_rdma(): monitoring_port=9587, enable_rdma=True, colocation_ports=[ - {'data_port': 3049, 'monitoring_port': 9588}, # missing rdma_port - {'data_port': 4049, 'monitoring_port': 9589, 'rdma_port': 20051}, + {'data_port': 3049, 'monitoring_port': 9588, 'cluster_qos_port': 31312}, # missing rdma_port + {'data_port': 4049, 'monitoring_port': 9589, 'cluster_qos_port': 31313, 'rdma_port': 20051}, ] ) spec.validate() diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index 2a9de94636ff..f96cd03f1d0b 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -1350,8 +1350,13 @@ yaml.add_representer(ServiceSpec, ServiceSpec.yaml_representer) class NFSServiceSpec(ServiceSpec): - COLOCATION_PORT_FIELDS = ['data_port', 'monitoring_port'] - COLOCATION_PORT_FIELDS_WITH_RDMA = ['data_port', 'monitoring_port', 'rdma_port'] + COLOCATION_PORT_FIELDS = ['data_port', 'monitoring_port', 'cluster_qos_port'] + COLOCATION_PORT_FIELDS_WITH_RDMA = [ + 'data_port', + 'monitoring_port', + 'cluster_qos_port', + 'rdma_port' + ] def __init__(self, service_type: str = 'nfs', diff --git a/src/python-common/ceph/tests/test_service_spec.py b/src/python-common/ceph/tests/test_service_spec.py index c9ec801eab97..1a8c011e1e12 100644 --- a/src/python-common/ceph/tests/test_service_spec.py +++ b/src/python-common/ceph/tests/test_service_spec.py @@ -558,8 +558,8 @@ def test_nfs_spec_rdma_default(): spec = NFSServiceSpec(service_id='mynfs', placement=PlacementSpec(count=1)) assert spec.enable_rdma is False assert spec.rdma_port is None - assert spec.get_port_start() == [2049, 9587] - assert spec.get_colocation_port_fields() == ['data_port', 'monitoring_port'] + assert spec.get_port_start() == [2049, 9587, 31311] + assert spec.get_colocation_port_fields() == ['data_port', 'monitoring_port', 'cluster_qos_port'] def test_nfs_spec_rdma_enabled(): @@ -571,8 +571,8 @@ def test_nfs_spec_rdma_enabled(): ) assert spec.enable_rdma is True assert spec.rdma_port is None - assert spec.get_port_start() == [2049, 9587, 20049] - assert spec.get_colocation_port_fields() == ['data_port', 'monitoring_port', 'rdma_port'] + assert spec.get_port_start() == [2049, 9587, 31311, 20049] + assert spec.get_colocation_port_fields() == ['data_port', 'monitoring_port', 'cluster_qos_port', 'rdma_port'] def test_nfs_spec_rdma_custom_port(): @@ -587,7 +587,7 @@ def test_nfs_spec_rdma_custom_port(): ) assert spec.enable_rdma is True assert spec.rdma_port == 20050 - assert spec.get_port_start() == [3049, 9588, 20050] + assert spec.get_port_start() == [3049, 9588, 31311, 20050] def test_nfs_spec_from_json_rdma():