From d4a28eba69189072ebbe3f44a6e1d47d945d0a47 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 (cherry picked from commit 7c8f1b9edc921711fa30345bbecea2dcd5de1229) --- 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 cf143ce92cc09..8409f1974c53d 100644 --- a/src/cls/rgw/cls_rgw_types.h +++ b/src/cls/rgw/cls_rgw_types.h @@ -886,6 +886,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 134e7e56ea047..a95a2e244a1dd 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -7447,6 +7447,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(); int ret = store->gc->send_chain(chain, tag, false); // do it async -- 2.39.5