]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: data_sync_source_zones only contains 'exporting' zones
authorCasey Bodley <cbodley@redhat.com>
Mon, 10 Feb 2020 21:59:35 +0000 (16:59 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 13 Feb 2020 20:39:01 +0000 (15:39 -0500)
RGWRados spawns a RGWDataSyncProcessorThread for each zone in
data_sync_source_zones, but these threads would fail to initialize
with ENOTSUP, and RGWOp_DATALog_Status would crash calling into an
uninitialized RGWDataSyncStatusManager

Fixes: https://tracker.ceph.com/issues/44068
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/services/svc_zone.cc

index 770cf983849299cabd09b38a47fd9b392d951a71..db44bc192fdc0785906e55dcffe518883efc2225 100644 (file)
@@ -194,8 +194,9 @@ int RGWSI_Zone::do_start()
     return ret;
   }
 
+  auto sync_modules = sync_modules_svc->get_manager();
   RGWSyncModuleRef sm;
-  if (!sync_modules_svc->get_manager()->get_module(zone_public_config->tier_type, &sm)) {
+  if (!sync_modules->get_module(zone_public_config->tier_type, &sm)) {
     lderr(cct) << "ERROR: tier type not found: " << zone_public_config->tier_type << dendl;
     return -EINVAL;
   }
@@ -232,7 +233,7 @@ int RGWSI_Zone::do_start()
     bool zone_is_target = target_zones.find(z.id) != target_zones.end();
 
     if (zone_is_source || zone_is_target) {
-      if (zone_is_source) {
+      if (zone_is_source && sync_modules->supports_data_export(z.tier_type)) {
         data_sync_source_zones.push_back(&z);
       }
       if (zone_is_target) {