Skip to content

Commit 3e25d8c

Browse files
authored
Merge pull request ceph#65772 from cbodley/wip-73348
rgw: fix 'bucket rm --bypass-gc' for copied objects Reviewed-by: J. Eric Ivancich <[email protected]>
2 parents 0d84fdb + 1fba459 commit 3e25d8c

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

src/rgw/driver/rados/rgw_rados.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11598,7 +11598,10 @@ librados::Rados* RGWRados::get_rados_handle()
1159811598
return &rados;
1159911599
}
1160011600

11601-
int RGWRados::delete_raw_obj_aio(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, list<librados::AioCompletion *>& handles)
11601+
int RGWRados::delete_tail_obj_aio(const DoutPrefixProvider *dpp,
11602+
const rgw_raw_obj& obj,
11603+
const std::string& tag,
11604+
list<librados::AioCompletion *>& handles)
1160211605
{
1160311606
rgw_rados_ref ref;
1160411607
int ret = get_raw_obj_ref(dpp, obj, &ref);
@@ -11608,8 +11611,7 @@ int RGWRados::delete_raw_obj_aio(const DoutPrefixProvider *dpp, const rgw_raw_ob
1160811611
}
1160911612

1161011613
ObjectWriteOperation op;
11611-
list<string> prefixes;
11612-
cls_rgw_remove_obj(op, prefixes);
11614+
cls_refcount_put(op, tag, true);
1161311615

1161411616
AioCompletion *c = librados::Rados::aio_create_completion(nullptr, nullptr);
1161511617
ret = ref.ioctx.aio_operate(ref.obj.oid, c, &op);

src/rgw/driver/rados/rgw_rados.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1686,7 +1686,8 @@ int restore_obj_from_cloud(RGWLCCloudTierCtx& tier_ctx,
16861686

16871687
librados::Rados* get_rados_handle();
16881688

1689-
int delete_raw_obj_aio(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj, std::list<librados::AioCompletion *>& handles);
1689+
int delete_tail_obj_aio(const DoutPrefixProvider *dpp, const rgw_raw_obj& obj,
1690+
const std::string& tag, std::list<librados::AioCompletion *>& handles);
16901691
int delete_obj_aio(const DoutPrefixProvider *dpp, const rgw_obj& obj, RGWBucketInfo& info, RGWObjState *astate,
16911692
std::list<librados::AioCompletion *>& handles, bool keep_index_consistent,
16921693
optional_yield y);

src/rgw/driver/rados/rgw_sal_rados.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,10 @@ int RadosBucket::remove_bypass_gc(int concurrent_max, bool
555555
rgw_raw_obj raw_head_obj;
556556
store->get_raw_obj(manifest.get_head_placement_rule(), head_obj, &raw_head_obj);
557557

558+
// tag for cls_refcount
559+
const std::string tag = (astate->tail_tag.length() > 0
560+
? astate->tail_tag.to_str()
561+
: astate->obj_tag.to_str());
558562
for (; miter != manifest.obj_end(dpp) && max_aio--; ++miter) {
559563
if (!max_aio) {
560564
ret = drain_aio(handles);
@@ -571,7 +575,7 @@ int RadosBucket::remove_bypass_gc(int concurrent_max, bool
571575
continue;
572576
}
573577

574-
ret = store->getRados()->delete_raw_obj_aio(dpp, last_obj, handles);
578+
ret = store->getRados()->delete_tail_obj_aio(dpp, last_obj, tag, handles);
575579
if (ret < 0) {
576580
ldpp_dout(dpp, -1) << "ERROR: delete obj aio failed with " << ret << dendl;
577581
return ret;

0 commit comments

Comments
 (0)