import source of Ceph Squid 19.2.2 release

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2025-04-17 15:14:17 +02:00
parent c783d93f19
commit 65fd299818
12 changed files with 63 additions and 27 deletions

View File

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(ceph project(ceph
VERSION 19.2.1 VERSION 19.2.2
LANGUAGES CXX C ASM) LANGUAGES CXX C ASM)
foreach(policy CMP0127 CMP0135) foreach(policy CMP0127 CMP0135)

View File

@ -181,7 +181,7 @@
# main package definition # main package definition
################################################################################# #################################################################################
Name: ceph Name: ceph
Version: 19.2.1 Version: 19.2.2
Release: 0%{?dist} Release: 0%{?dist}
%if 0%{?fedora} || 0%{?rhel} %if 0%{?fedora} || 0%{?rhel}
Epoch: 2 Epoch: 2
@ -197,7 +197,7 @@ License: LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-
Group: System/Filesystems Group: System/Filesystems
%endif %endif
URL: http://ceph.com/ URL: http://ceph.com/
Source0: %{?_remote_tarball_prefix}ceph-19.2.1.tar.bz2 Source0: %{?_remote_tarball_prefix}ceph-19.2.2.tar.bz2
%if 0%{?suse_version} %if 0%{?suse_version}
# _insert_obs_source_lines_here # _insert_obs_source_lines_here
ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64 ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64
@ -1334,7 +1334,7 @@ This package provides a Ceph hardware monitoring agent.
# common # common
################################################################################# #################################################################################
%prep %prep
%autosetup -p1 -n ceph-19.2.1 %autosetup -p1 -n ceph-19.2.2
%build %build
# Disable lto on systems that do not support symver attribute # Disable lto on systems that do not support symver attribute

View File

@ -1,3 +1,9 @@
ceph (19.2.2-1) stable; urgency=medium
* New upstream release
-- Ceph Release Team <ceph-maintainers@ceph.io> Tue, 08 Apr 2025 21:08:35 +0000
ceph (19.2.1-1) stable; urgency=medium ceph (19.2.1-1) stable; urgency=medium
* New upstream release * New upstream release

View File

@ -460,6 +460,37 @@ done
mys3cmd rb --recursive s3://$d_bkt mys3cmd rb --recursive s3://$d_bkt
mys3cmd rb --recursive s3://$o_bkt mys3cmd rb --recursive s3://$o_bkt
############################################################
# copy a multipart object to itself
# run gc process after the copy, then try to get the object
o_bkt="orig-mp-bkt-8"
mys3cmd mb s3://$o_bkt
mp_obj="multipart-obj-1"
mys3cmd put -q $huge_obj s3://${o_bkt}/$mp_obj
mys3cmd cp --mime-type="text/plain" s3://${o_bkt}/$mp_obj s3://${o_bkt}/$mp_obj
#####################################################################
# FORCE GARBAGE COLLECTION
sleep 6 # since for testing age at which gc can happen is 5 secs
radosgw-admin gc process --include-all
#####################################################################
mp_obj_retrieved="multipart-obj-1-retrieved"
mys3cmd get s3://${o_bkt}/$mp_obj $mp_obj_retrieved --force
if [ -f $mp_obj_retrieved ]; then
rm -f $mp_obj_retrieved
else
echo "ERROR: failed to get the object after copying to itself"
exit 1
fi
mys3cmd rb --recursive s3://$o_bkt
##################################################################### #####################################################################
# FORCE GARBAGE COLLECTION # FORCE GARBAGE COLLECTION
sleep 6 # since for testing age at which gc can happen is 5 secs sleep 6 # since for testing age at which gc can happen is 5 secs

View File

@ -1,2 +1,2 @@
58a7fab8be0a062d730ad7da874972fd3fba59fb 0eceb0defba60152a8182f7bd87d164b639885b8
19.2.1 19.2.2

View File

@ -517,7 +517,7 @@ class DBOp {
* *
* - RGWObjState. Below are omitted from that struct * - RGWObjState. Below are omitted from that struct
* as they seem in-memory variables * as they seem in-memory variables
* * is_atomic, has_atts, exists, prefetch_data, keep_tail, * * is_atomic, has_atts, exists, prefetch_data,
* - RGWObjManifest * - RGWObjManifest
* *
* Extra field added "IsMultipart" to flag multipart uploads, * Extra field added "IsMultipart" to flag multipart uploads,

View File

@ -675,7 +675,7 @@ int AppendObjectProcessor::prepare(optional_yield y)
tail_placement_rule.storage_class = RGW_STORAGE_CLASS_STANDARD; tail_placement_rule.storage_class = RGW_STORAGE_CLASS_STANDARD;
} }
manifest.set_prefix(cur_manifest->get_prefix()); manifest.set_prefix(cur_manifest->get_prefix());
astate->keep_tail = true; keep_tail = true;
} }
manifest.set_multipart_part_rule(store->ctx()->_conf->rgw_obj_stripe_size, cur_part_num); manifest.set_multipart_part_rule(store->ctx()->_conf->rgw_obj_stripe_size, cur_part_num);
@ -742,6 +742,7 @@ int AppendObjectProcessor::complete(size_t accounted_size, const string &etag, c
obj_op.meta.user_data = user_data; obj_op.meta.user_data = user_data;
obj_op.meta.zones_trace = zones_trace; obj_op.meta.zones_trace = zones_trace;
obj_op.meta.modify_tail = true; obj_op.meta.modify_tail = true;
obj_op.meta.keep_tail = keep_tail;
obj_op.meta.appendable = true; obj_op.meta.appendable = true;
//Add the append part number //Add the append part number
bufferlist cur_part_num_bl; bufferlist cur_part_num_bl;

View File

@ -257,6 +257,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
uint64_t *cur_accounted_size; uint64_t *cur_accounted_size;
std::string cur_etag; std::string cur_etag;
const std::string unique_tag; const std::string unique_tag;
bool keep_tail;
RGWObjManifest *cur_manifest; RGWObjManifest *cur_manifest;
@ -274,7 +275,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
: ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, : ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule,
owner, obj_ctx, _head_obj, dpp, y, trace), owner, obj_ctx, _head_obj, dpp, y, trace),
position(position), cur_size(0), cur_accounted_size(cur_accounted_size), position(position), cur_size(0), cur_accounted_size(cur_accounted_size),
unique_tag(unique_tag), cur_manifest(nullptr) unique_tag(unique_tag), keep_tail(false), cur_manifest(nullptr)
{} {}
int prepare(optional_yield y) override; int prepare(optional_yield y) override;
int complete(size_t accounted_size, const std::string& etag, int complete(size_t accounted_size, const std::string& etag,

View File

@ -3119,8 +3119,8 @@ int RGWRados::swift_versioning_restore(RGWObjectCtx& obj_ctx,
int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_size, int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_size,
map<string, bufferlist>& attrs, map<string, bufferlist>& attrs,
bool assume_noent, bool modify_tail, bool assume_noent, void *_index_op,
void *_index_op, const req_context& rctx, const req_context& rctx,
jspan_context& trace, bool log_op) jspan_context& trace, bool log_op)
{ {
RGWRados::Bucket::UpdateIndex *index_op = static_cast<RGWRados::Bucket::UpdateIndex *>(_index_op); RGWRados::Bucket::UpdateIndex *index_op = static_cast<RGWRados::Bucket::UpdateIndex *>(_index_op);
@ -3164,7 +3164,7 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
if (!ptag && !index_op->get_optag()->empty()) { if (!ptag && !index_op->get_optag()->empty()) {
ptag = index_op->get_optag(); ptag = index_op->get_optag();
} }
r = target->prepare_atomic_modification(rctx.dpp, op, reset_obj, ptag, meta.if_match, meta.if_nomatch, false, modify_tail, rctx.y); r = target->prepare_atomic_modification(rctx.dpp, op, reset_obj, ptag, meta.if_match, meta.if_nomatch, false, meta.modify_tail, rctx.y);
if (r < 0) if (r < 0)
return r; return r;
@ -3307,7 +3307,7 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
poolid = ioctx.get_id(); poolid = ioctx.get_id();
r = target->complete_atomic_modification(rctx.dpp, rctx.y); r = target->complete_atomic_modification(rctx.dpp, meta.keep_tail, rctx.y);
if (r < 0) { if (r < 0) {
ldpp_dout(rctx.dpp, 0) << "ERROR: complete_atomic_modification returned r=" << r << dendl; ldpp_dout(rctx.dpp, 0) << "ERROR: complete_atomic_modification returned r=" << r << dendl;
} }
@ -3420,13 +3420,13 @@ int RGWRados::Object::Write::write_meta(uint64_t size, uint64_t accounted_size,
bool assume_noent = (meta.if_match == NULL && meta.if_nomatch == NULL); bool assume_noent = (meta.if_match == NULL && meta.if_nomatch == NULL);
int r; int r;
if (assume_noent) { if (assume_noent) {
r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op, rctx, trace, log_op); r = _do_write_meta(size, accounted_size, attrs, assume_noent, (void *)&index_op, rctx, trace, log_op);
if (r == -EEXIST) { if (r == -EEXIST) {
assume_noent = false; assume_noent = false;
} }
} }
if (!assume_noent) { if (!assume_noent) {
r = _do_write_meta(size, accounted_size, attrs, assume_noent, meta.modify_tail, (void *)&index_op, rctx, trace, log_op); r = _do_write_meta(size, accounted_size, attrs, assume_noent, (void *)&index_op, rctx, trace, log_op);
} }
return r; return r;
} }
@ -4945,8 +4945,6 @@ int RGWRados::copy_obj(RGWObjectCtx& src_obj_ctx,
pmanifest = &manifest; pmanifest = &manifest;
} else { } else {
pmanifest = amanifest; pmanifest = amanifest;
/* don't send the object's tail for garbage collection */
astate->keep_tail = true;
} }
if (copy_first) { if (copy_first) {
@ -4971,6 +4969,7 @@ int RGWRados::copy_obj(RGWObjectCtx& src_obj_ctx,
write_op.meta.olh_epoch = olh_epoch; write_op.meta.olh_epoch = olh_epoch;
write_op.meta.delete_at = delete_at; write_op.meta.delete_at = delete_at;
write_op.meta.modify_tail = !copy_itself; write_op.meta.modify_tail = !copy_itself;
write_op.meta.keep_tail = copy_itself;
ret = write_op.write_meta(obj_size, astate->accounted_size, attrs, rctx, trace); ret = write_op.write_meta(obj_size, astate->accounted_size, attrs, rctx, trace);
if (ret < 0) { if (ret < 0) {
@ -5359,9 +5358,9 @@ int RGWRados::bucket_suspended(const DoutPrefixProvider *dpp, rgw_bucket& bucket
return 0; return 0;
} }
int RGWRados::Object::complete_atomic_modification(const DoutPrefixProvider *dpp, optional_yield y) int RGWRados::Object::complete_atomic_modification(const DoutPrefixProvider *dpp, bool keep_tail, optional_yield y)
{ {
if ((!manifest)|| state->keep_tail) if ((!manifest) || keep_tail)
return 0; return 0;
cls_rgw_obj_chain chain; cls_rgw_obj_chain chain;
@ -5913,7 +5912,7 @@ int RGWRados::Object::Delete::delete_obj(optional_yield y, const DoutPrefixProvi
} }
r = index_op.complete_del(dpp, poolid, epoch, state->mtime, params.remove_objs, y, log_op); r = index_op.complete_del(dpp, poolid, epoch, state->mtime, params.remove_objs, y, log_op);
int ret = target->complete_atomic_modification(dpp, y); int ret = target->complete_atomic_modification(dpp, false, y);
if (ret < 0) { if (ret < 0) {
ldpp_dout(dpp, 0) << "ERROR: complete_atomic_modification returned ret=" << ret << dendl; ldpp_dout(dpp, 0) << "ERROR: complete_atomic_modification returned ret=" << ret << dendl;
} }

View File

@ -692,7 +692,7 @@ public:
int prepare_atomic_modification(const DoutPrefixProvider *dpp, librados::ObjectWriteOperation& op, bool reset_obj, const std::string *ptag, int prepare_atomic_modification(const DoutPrefixProvider *dpp, librados::ObjectWriteOperation& op, bool reset_obj, const std::string *ptag,
const char *ifmatch, const char *ifnomatch, bool removal_op, bool modify_tail, optional_yield y); const char *ifmatch, const char *ifnomatch, bool removal_op, bool modify_tail, optional_yield y);
int complete_atomic_modification(const DoutPrefixProvider *dpp, optional_yield y); int complete_atomic_modification(const DoutPrefixProvider *dpp, bool keep_tail, optional_yield y);
public: public:
Object(RGWRados *_store, const RGWBucketInfo& _bucket_info, RGWObjectCtx& _ctx, const rgw_obj& _obj) : store(_store), bucket_info(_bucket_info), Object(RGWRados *_store, const RGWBucketInfo& _bucket_info, RGWObjectCtx& _ctx, const rgw_obj& _obj) : store(_store), bucket_info(_bucket_info),
@ -810,22 +810,22 @@ public:
const std::string *user_data; const std::string *user_data;
rgw_zone_set *zones_trace; rgw_zone_set *zones_trace;
bool modify_tail; bool modify_tail;
bool keep_tail;
bool completeMultipart; bool completeMultipart;
bool appendable; bool appendable;
MetaParams() : mtime(NULL), rmattrs(NULL), data(NULL), manifest(NULL), ptag(NULL), MetaParams() : mtime(NULL), rmattrs(NULL), data(NULL), manifest(NULL), ptag(NULL),
remove_objs(NULL), category(RGWObjCategory::Main), flags(0), remove_objs(NULL), category(RGWObjCategory::Main), flags(0),
if_match(NULL), if_nomatch(NULL), canceled(false), user_data(nullptr), zones_trace(nullptr), if_match(NULL), if_nomatch(NULL), canceled(false), user_data(nullptr), zones_trace(nullptr),
modify_tail(false), completeMultipart(false), appendable(false) {} modify_tail(false), keep_tail(false), completeMultipart(false), appendable(false) {}
} meta; } meta;
explicit Write(RGWRados::Object *_target) : target(_target) {} explicit Write(RGWRados::Object *_target) : target(_target) {}
int _do_write_meta(uint64_t size, uint64_t accounted_size, int _do_write_meta(uint64_t size, uint64_t accounted_size,
std::map<std::string, bufferlist>& attrs, std::map<std::string, bufferlist>& attrs,
bool modify_tail, bool assume_noent, bool assume_noent, void *index_op,
void *index_op, const req_context& rctx, const req_context& rctx, jspan_context& trace,
jspan_context& trace,
bool log_op = true); bool log_op = true);
int write_meta(uint64_t size, uint64_t accounted_size, int write_meta(uint64_t size, uint64_t accounted_size,
std::map<std::string, bufferlist>& attrs, std::map<std::string, bufferlist>& attrs,

View File

@ -93,7 +93,6 @@ RGWObjState::RGWObjState(const RGWObjState& rhs) : obj (rhs.obj) {
data = rhs.data; data = rhs.data;
} }
prefetch_data = rhs.prefetch_data; prefetch_data = rhs.prefetch_data;
keep_tail = rhs.keep_tail;
is_olh = rhs.is_olh; is_olh = rhs.is_olh;
objv_tracker = rhs.objv_tracker; objv_tracker = rhs.objv_tracker;
pg_ver = rhs.pg_ver; pg_ver = rhs.pg_ver;

View File

@ -101,7 +101,6 @@ struct RGWObjState {
bool has_data{false}; bool has_data{false};
bufferlist data; bufferlist data;
bool prefetch_data{false}; bool prefetch_data{false};
bool keep_tail{false};
bool is_olh{false}; bool is_olh{false};
bufferlist olh_tag; bufferlist olh_tag;
uint64_t pg_ver{false}; uint64_t pg_ver{false};