From 6d7841c6f050f6bd813d54df65d38e7f6934d22d Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Wed, 20 Jul 2016 13:02:03 +0200 Subject: [PATCH] rgw: fix upgrade from old multisite to new multisite configuration We need to store the updated current period after adding the old converted regions Fixes: http://tracker.ceph.com/issues/16751 Signed-off-by: Orit Wasserman --- src/rgw/rgw_rados.cc | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index d32f9b43d6e..b38ff7cdb0e 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -3461,6 +3461,7 @@ int RGWRados::replace_region_with_zonegroup() iter ++) { RGWZoneParams zoneparams(iter->first, iter->first); zoneparams.set_id(iter->first); + zoneparams.realm_id = realm.get_id(); ret = zoneparams.init(cct, this); if (ret < 0) { ldout(cct, 0) << "failed to init zoneparams " << iter->first << ": " << cpp_strerror(-ret) << dendl; @@ -3488,16 +3489,37 @@ int RGWRados::replace_region_with_zonegroup() ldout(cct, 0) << "failed to add zonegroup to current_period: " << cpp_strerror(-ret) << dendl; return ret; } - ret = current_period.update(); - if (ret < 0) { - ldout(cct, 0) << "failed to update current_period: " << cpp_strerror(-ret) << dendl; - return ret; - } } + } + + if (!current_period.get_id().empty()) { + ret = current_period.update(); + if (ret < 0) { + ldout(cct, 0) << "failed to update new period: " << cpp_strerror(-ret) << dendl; + return ret; + } + ret = current_period.store_info(false); + if (ret < 0) { + ldout(cct, 0) << "failed to store new period: " << cpp_strerror(-ret) << dendl; + return ret; + } + ret = current_period.reflect(); + if (ret < 0) { + ldout(cct, 0) << "failed to update local objects: " << cpp_strerror(-ret) << dendl; + return ret; + } + } + for (auto const& iter : regions) { + RGWZoneGroup zonegroup(iter); + int ret = zonegroup.init(cct, this, true, true); + if (ret < 0) { + ldout(cct, 0) << "failed init zonegroup" << iter << ": ret "<< ret << " " << cpp_strerror(-ret) << dendl; + return ret; + } ret = zonegroup.delete_obj(true); if (ret < 0 && ret != -ENOENT) { - ldout(cct, 0) << "failed to delete region " << *iter << ": ret "<< ret << " " << cpp_strerror(-ret) + ldout(cct, 0) << "failed to delete region " << iter << ": ret "<< ret << " " << cpp_strerror(-ret) << dendl; return ret; } -- 2.39.5