From: Ali Masarwa Date: Mon, 29 Jun 2026 11:09:04 +0000 (+0300) Subject: rgw/posix: reading a detele marker returns -ENOENT X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=720a3b7c3d35988e1b481f86e9562e7855e38e8c;p=ceph.git rgw/posix: reading a detele marker returns -ENOENT Signed-off-by: Ali Masarwa --- diff --git a/src/rgw/driver/posix/rgw_sal_posix.cc b/src/rgw/driver/posix/rgw_sal_posix.cc index a7c097f82fe..01ce60f7210 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.cc +++ b/src/rgw/driver/posix/rgw_sal_posix.cc @@ -1540,7 +1540,14 @@ int VersionedDirectory::stat(const DoutPrefixProvider* dpp, bool force) } bufferlist bl; if (rgw::sal::get_attr(attrs, RGW_POSIX_ATTR_VERSION, bl)) { - // cur_version.reset(); + uint16_t flags = 0; + ceph::decode(flags, bl); + if (flags & rgw_bucket_dir_entry::FLAG_DELETE_MARKER) { + ldpp_dout(dpp, 0) << "ERROR: a delete marker, returning ENOENT " + << get_name() << dendl; + cur_version.reset(); + return -ENOENT; + } } } @@ -1683,7 +1690,7 @@ int VersionedDirectory::copy(const DoutPrefixProvider *dpp, optional_yield y, int VersionedDirectory::add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, - std::string& name) + const std::string &name) { // Create as temporary file first int ret = marker->create(dpp, /*existed=*/nullptr, /*temp_file=*/true); diff --git a/src/rgw/driver/posix/rgw_sal_posix.h b/src/rgw/driver/posix/rgw_sal_posix.h index b3caeade70e..b0656eaf2b9 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.h +++ b/src/rgw/driver/posix/rgw_sal_posix.h @@ -337,7 +337,7 @@ public: std::string get_new_instance(); int remove_symlink(const DoutPrefixProvider *dpp, optional_yield y, std::string match = ""); int add_file(const DoutPrefixProvider *dpp, std::unique_ptr&& file, bool* existed = nullptr, bool temp_file = false); - int add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, std::string& name); + int add_delete_marker(const DoutPrefixProvider* dpp, optional_yield y, std::unique_ptr& marker, const std::string &name); FSEnt* get_cur_version_ent() { return cur_version.get(); }; int set_cur_version_ent(const DoutPrefixProvider *dpp, FSEnt* file); virtual std::unique_ptr clone_base() override {