mirror of
https://git.proxmox.com/git/ceph.git
synced 2025-08-11 14:10:00 +00:00
import source of Ceph Squid 19.2.2 release
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
c783d93f19
commit
65fd299818
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
58a7fab8be0a062d730ad7da874972fd3fba59fb
|
0eceb0defba60152a8182f7bd87d164b639885b8
|
||||||
19.2.1
|
19.2.2
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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};
|
||||||
|
Loading…
Reference in New Issue
Block a user