Project

General

Profile

Actions

Bug #51096

closed

rgw: octopus fails to parse pacific's bucket layout

Added by Nicolas Lindae almost 3 years ago. Updated almost 3 years ago.

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);
 }

Actions #1

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

Also available in: Atom PDF