]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add OPT_BUCKET_SYNC_RUN to gc_ops_list, so that
authorPritha Srivastava <prsrivas@redhat.com>
Fri, 25 Feb 2022 11:00:46 +0000 (16:30 +0530)
committerCory Snyder <csnyder@iland.com>
Wed, 16 Mar 2022 14:19:43 +0000 (10:19 -0400)
gc is initialised and send_chain does not crash.

Also deleting objects inline in case gc is uninitialised.

Fixes: https://tracker.ceph.com/issues/54417
Signed-off-by: Pritha Srivastava <prsrivas@redhat.com>
(cherry picked from commit aa3006ea34e301148779f6055ee3fa045dabbf7e)

Conflicts:
src/rgw/rgw_admin.cc

Cherry-pick notes:
- Conflicts due to differences in ops lists

src/rgw/rgw_admin.cc
src/rgw/rgw_rados.cc

index 7928867648e292d03066a4922b33777ac228ec93..4af87a1d5d8454a78e1ac9a12eb0fb31a64e9622 100644 (file)
@@ -3909,7 +3909,8 @@ int main(int argc, const char **argv)
                         OPT::USER_RM,    // --purge-data
                         OPT::OBJECTS_EXPIRE,
                         OPT::OBJECTS_EXPIRE_STALE_RM,
-                        OPT::LC_PROCESS
+                        OPT::LC_PROCESS,
+             OPT::BUCKET_SYNC_RUN,
     };
 
   bool raw_storage_op = (raw_storage_ops_list.find(opt_cmd) != raw_storage_ops_list.end() ||
index b9f3e08f59e06c7bce79d5beb9973193fc444cff..2da936ae4254431c91a60724c3f3618b0ad08766 100644 (file)
@@ -4796,10 +4796,16 @@ int RGWRados::Object::complete_atomic_modification(const DoutPrefixProvider *dpp
   }
 
   string tag = (state->tail_tag.length() > 0 ? state->tail_tag.to_str() : state->obj_tag.to_str());
-  auto ret = store->gc->send_chain(chain, tag); // do it synchronously
-  if (ret < 0) {
-    //Delete objects inline if send chain to gc fails
+  if (store->gc == nullptr) {
+    ldpp_dout(dpp, 0) << "deleting objects inline since gc isn't initialized" << dendl;
+    //Delete objects inline just in case gc hasn't been initialised, prevents crashes
     store->delete_objs_inline(dpp, chain, tag);
+  } else {
+    auto ret = store->gc->send_chain(chain, tag); // do it synchronously
+    if (ret < 0) {
+      //Delete objects inline if send chain to gc fails
+      store->delete_objs_inline(dpp, chain, tag);
+    }
   }
   return 0;
 }