From 59b3f2801118e1beda7ab07a29acd6f817d496d7 Mon Sep 17 00:00:00 2001 From: Adam King Date: Mon, 15 Jul 2024 14:14:00 -0400 Subject: [PATCH] mgr/cephadm: allow disabling rgw_run_sync_thread through spec This is desirable for an RGW service that you don't want to send multisite sync data so the RGW daemons can focus more on handling IO. Note they may still receive mulsitie sync data unless they are removed from the zone and zonegroup replication endpoints Signed-off-by: Adam King (cherry picked from commit d620ba65121e2a3c418d39823bc7752cd12c9f80) Conflicts: src/python-common/ceph/deployment/service_spec.py --- .../mgr/cephadm/services/cephadmservice.py | 8 ++++++++ src/pybind/mgr/cephadm/tests/test_services.py | 20 +++++++++++++++++++ .../ceph/deployment/service_spec.py | 3 +++ 3 files changed, 31 insertions(+) diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index 1792cd28fcc..8b4663519a7 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -1081,6 +1081,14 @@ class RgwService(CephService): 'value': str(spec.rgw_bucket_counters_cache_size), }) + if getattr(spec, 'disable_multisite_sync_traffic', None) is not None: + ret, out, err = self.mgr.check_mon_command({ + 'prefix': 'config set', + 'who': daemon_name, + 'name': 'rgw_run_sync_thread', + 'value': 'false' if spec.disable_multisite_sync_traffic else 'true', + }) + daemon_spec.keyring = keyring daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec) diff --git a/src/pybind/mgr/cephadm/tests/test_services.py b/src/pybind/mgr/cephadm/tests/test_services.py index 617d12bc8b6..a595948f5c0 100644 --- a/src/pybind/mgr/cephadm/tests/test_services.py +++ b/src/pybind/mgr/cephadm/tests/test_services.py @@ -1474,6 +1474,26 @@ class TestRGWService: }) assert f == expected + @pytest.mark.parametrize( + "disable_sync_traffic", + [ + (True), + (False), + ] + ) + @patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}')) + def test_rgw_disable_sync_traffic(self, disable_sync_traffic, cephadm_module: CephadmOrchestrator): + with with_host(cephadm_module, 'host1'): + s = RGWSpec(service_id="foo", + disable_multisite_sync_traffic=disable_sync_traffic) + with with_service(cephadm_module, s) as dds: + _, f, _ = cephadm_module.check_mon_command({ + 'prefix': 'config get', + 'who': f'client.{dds[0]}', + 'key': 'rgw_run_sync_thread', + }) + assert f == ('false' if disable_sync_traffic else 'true') + class TestMonService: diff --git a/src/python-common/ceph/deployment/service_spec.py b/src/python-common/ceph/deployment/service_spec.py index d99f656fbfe..6ed7b5355dc 100644 --- a/src/python-common/ceph/deployment/service_spec.py +++ b/src/python-common/ceph/deployment/service_spec.py @@ -1224,6 +1224,7 @@ class RGWSpec(ServiceSpec): rgw_user_counters_cache_size: Optional[int] = None, rgw_bucket_counters_cache: Optional[bool] = False, rgw_bucket_counters_cache_size: Optional[int] = None, + disable_multisite_sync_traffic: Optional[bool] = None, ): assert service_type == 'rgw', service_type @@ -1273,6 +1274,8 @@ class RGWSpec(ServiceSpec): self.rgw_bucket_counters_cache = rgw_bucket_counters_cache #: Used to set number of entries in each cache of bucket counters self.rgw_bucket_counters_cache_size = rgw_bucket_counters_cache_size + #: Used to make RGW not do multisite replication so it can dedicate to IO + self.disable_multisite_sync_traffic = disable_multisite_sync_traffic def get_port_start(self) -> List[int]: return [self.get_port()] -- 2.47.3