From ea62954d9def9b20443aca7ebbd80fc02adafb33 Mon Sep 17 00:00:00 2001 From: Daniel Gryniewicz Date: Mon, 13 Sep 2021 13:03:18 -0400 Subject: [PATCH] RGW Zipper - comment setting s->object in website code Signed-off-by: Daniel Gryniewicz --- src/rgw/rgw_rest_s3.cc | 9 ++++++--- src/rgw/rgw_rest_swift.cc | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 36ba47f2cde9e..e4191f0c9888a 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -5023,10 +5023,10 @@ int RGWHandler_REST_S3Website::retarget(RGWOp* op, RGWOp** new_op, optional_yiel /* * FIXME: if s->object != new_obj, drop op and create a new op to handle * operation. Or remove this comment if it's not applicable anymore + * dang: This could be problematic, since we're not actually replacing op, but + * we are replacing s->object. Something might have a pointer to it. */ - - s->object = store->get_object(new_obj); - s->object->set_bucket(s->bucket.get()); + s->object = s->bucket->get_object(new_obj); return 0; } @@ -5055,6 +5055,9 @@ int RGWHandler_REST_S3Website::serve_errordoc(const DoutPrefixProvider *dpp, int getop->if_unmod = NULL; getop->if_match = NULL; getop->if_nomatch = NULL; + /* This is okay. It's an error, so nothing will run after this, and it can be + * called by abort_early(), which can be called before s->object or s->bucket + * are set up. Note, it won't have bucket. */ s->object = store->get_object(errordoc_key); ret = init_permissions(getop.get(), y); diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 98c0b54a77c99..124ce202f1d0d 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -2365,6 +2365,9 @@ int RGWSwiftWebsiteHandler::serve_errordoc(const int http_ret, } } get_errpage_op(store, handler, s, http_ret); + /* This is okay. It's an error, so nothing will run after this, and it can be + * called by abort_early(), which can be called before s->object or s->bucket + * are set up. */ if (!rgw::sal::Bucket::empty(s->bucket.get())) { s->object = s->bucket->get_object(rgw_obj_key(std::to_string(http_ret) + error_doc)); } else { -- 2.39.5