Actions
Bug #51096
closedrgw: octopus fails to parse pacific's bucket layout
Status:
Won't Fix
Priority:
Normal
Assignee:
-
Target version:
-
% Done:
0%
Source:
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
I have an octopus cluster (15.2.13), when I edit the owner of a bucket using a pacific 16.2.4 client, the octopus clients then fail to parse the bucket info/layout.
E.g. Using a pacific client, I edited the bucket owner with this:
$ radosgw-admin bucket link --bucket testbucket --bucket-id "(...)" --uid user2
But then with octopus, the bucket info fails to parse:
$ radosgw-admin bucket stats
[]
2021-06-04T10:39:10.924+0000 7f0f6bfcd340 0 ERROR: could not decode buffer info, caught buffer::error
2021-06-04T10:39:10.924+0000 7f0f6bfcd340 -1 ERROR: do_read_bucket_instance_info failed: -5
This error would be printed per broken bucket. S3 also fails as you might expect:
$ s3cmd la
WARNING: Retrying failed request: /?location (500 (UnknownError))
WARNING: Waiting 3 sec...
...
I'm guessing that changes to how pacific stores the bucket cause this, specifically these changes, since octopus would try to decode fields that don't exist anymore:
$ git diff v15.2.13..v16.2.4 -- src/rgw/rgw_common.cc
@@ -2028,7 +2072,7 @@ RGWBucketInfo::~RGWBucketInfo()
}
void RGWBucketInfo::encode(bufferlist& bl) const {
- ENCODE_START(21, 4, bl);
+ ENCODE_START(23, 4, bl);
encode(bucket, bl);
encode(owner.id, bl);
encode(flags, bl);
@@ -2038,15 +2082,12 @@ void RGWBucketInfo::encode(bufferlist& bl) const {
encode(placement_rule, bl);
encode(has_instance_obj, bl);
encode(quota, bl);
- encode(num_shards, bl);
- encode(bucket_index_shard_hash_type, bl);
encode(requester_pays, bl);
encode(owner.tenant, bl);
encode(has_website, bl);
if (has_website) {
encode(website_conf, bl);
}
- encode((uint32_t)index_type, bl);
encode(swift_versioning, bl);
if (swift_versioning) {
encode(swift_ver_location, bl);
@@ -2063,11 +2104,13 @@ void RGWBucketInfo::encode(bufferlist& bl) const {
if (has_sync_policy) {
encode(*sync_policy, bl);
}
+ encode(layout, bl);
+ encode(owner.ns, bl);
ENCODE_FINISH(bl);
}
Updated by Casey Bodley almost 3 years ago
- Status changed from New to Won't Fix
octopus doesn't support the new bucket format
Actions