From 7c8f1b9edc921711fa30345bbecea2dcd5de1229 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 14 Nov 2016 10:22:03 -0800 Subject: [PATCH] rgw: don't store empty chains in gc Fixes: http://tracker.ceph.com/issues/17897 Signed-off-by: Yehuda Sadeh --- src/cls/rgw/cls_rgw_types.h | 4 ++++ src/rgw/rgw_rados.cc | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/cls/rgw/cls_rgw_types.h b/src/cls/rgw/cls_rgw_types.h index 61209e4b6d12..144c5af203f9 100644 --- a/src/cls/rgw/cls_rgw_types.h +++ b/src/cls/rgw/cls_rgw_types.h @@ -904,6 +904,10 @@ struct cls_rgw_obj_chain { static void generate_test_instances(list& ls) { ls.push_back(new cls_rgw_obj_chain); } + + bool empty() { + return objs.empty(); + } }; WRITE_CLASS_ENCODER(cls_rgw_obj_chain) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 352c87e7b7fc..91c23c81bbe8 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -7821,6 +7821,10 @@ int RGWRados::Object::complete_atomic_modification() cls_rgw_obj_chain chain; store->update_gc_chain(obj, state->manifest, &chain); + if (chain.empty()) { + return 0; + } + string tag = state->obj_tag.to_str(); return store->gc->send_chain(chain, tag, false); // do it async } -- 2.47.3