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)
project(ceph
VERSION 19.2.1
VERSION 19.2.2
LANGUAGES CXX C ASM)
foreach(policy CMP0127 CMP0135)

View File

@ -181,7 +181,7 @@
# main package definition
#################################################################################
Name: ceph
Version: 19.2.1
Version: 19.2.2
Release: 0%{?dist}
%if 0%{?fedora} || 0%{?rhel}
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
%endif
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}
# _insert_obs_source_lines_here
ExclusiveArch: x86_64 aarch64 ppc64le s390x riscv64
@ -1334,7 +1334,7 @@ This package provides a Ceph hardware monitoring agent.
# common
#################################################################################
%prep
%autosetup -p1 -n ceph-19.2.1
%autosetup -p1 -n ceph-19.2.2
%build
# 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
* New upstream release

View File

@ -460,6 +460,37 @@ done
mys3cmd rb --recursive s3://$d_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
sleep 6 # since for testing age at which gc can happen is 5 secs

View File

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

View File

@ -517,7 +517,7 @@ class DBOp {
*
* - RGWObjState. Below are omitted from that struct
* as they seem in-memory variables
* * is_atomic, has_atts, exists, prefetch_data, keep_tail,
* * is_atomic, has_atts, exists, prefetch_data,
* - RGWObjManifest
*
* 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;
}
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);
@ -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.zones_trace = zones_trace;
obj_op.meta.modify_tail = true;
obj_op.meta.keep_tail = keep_tail;
obj_op.meta.appendable = true;
//Add the append part number
bufferlist cur_part_num_bl;

View File

@ -257,6 +257,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
uint64_t *cur_accounted_size;
std::string cur_etag;
const std::string unique_tag;
bool keep_tail;
RGWObjManifest *cur_manifest;
@ -274,7 +275,7 @@ class MultipartObjectProcessor : public ManifestObjectProcessor {
: ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule,
owner, obj_ctx, _head_obj, dpp, y, trace),
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 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,
map<string, bufferlist>& attrs,
bool assume_noent, bool modify_tail,
void *_index_op, const req_context& rctx,
bool assume_noent, void *_index_op,
const req_context& rctx,
jspan_context& trace, bool log_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()) {
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)
return r;
@ -3307,7 +3307,7 @@ int RGWRados::Object::Write::_do_write_meta(uint64_t size, uint64_t accounted_si
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) {
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);
int r;
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) {
assume_noent = false;
}
}
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;
}
@ -4945,8 +4945,6 @@ int RGWRados::copy_obj(RGWObjectCtx& src_obj_ctx,
pmanifest = &manifest;
} else {
pmanifest = amanifest;
/* don't send the object's tail for garbage collection */
astate->keep_tail = true;
}
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.delete_at = delete_at;
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);
if (ret < 0) {
@ -5359,9 +5358,9 @@ int RGWRados::bucket_suspended(const DoutPrefixProvider *dpp, rgw_bucket& bucket
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;
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);
int ret = target->complete_atomic_modification(dpp, y);
int ret = target->complete_atomic_modification(dpp, false, y);
if (ret < 0) {
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,
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:
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;
rgw_zone_set *zones_trace;
bool modify_tail;
bool keep_tail;
bool completeMultipart;
bool appendable;
MetaParams() : mtime(NULL), rmattrs(NULL), data(NULL), manifest(NULL), ptag(NULL),
remove_objs(NULL), category(RGWObjCategory::Main), flags(0),
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;
explicit Write(RGWRados::Object *_target) : target(_target) {}
int _do_write_meta(uint64_t size, uint64_t accounted_size,
std::map<std::string, bufferlist>& attrs,
bool modify_tail, bool assume_noent,
void *index_op, const req_context& rctx,
jspan_context& trace,
bool assume_noent, void *index_op,
const req_context& rctx, jspan_context& trace,
bool log_op = true);
int write_meta(uint64_t size, uint64_t accounted_size,
std::map<std::string, bufferlist>& attrs,

View File

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

View File

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