Sometimes I get a little lost in the naming of RADOS objects in the case of RGW. So I’m noting here the basic principles to find them:
The fundamental cases
Case | Naming Format |
---|---|
In all cases | <bucket-id>_<object-name> (head) |
Stripes on Large object | <bucket-id>__shadow_<prefix>_<stripe-id> |
Multipart upload | <bucket-id>__multipart_<object-name>.<upload-id>.<part-id> |
Versioned object | <bucket-id>__:<version-id>_<object-name> |
- These objects are by default in <zone>.rgw.buckets.data (by default in default.rgw.buckets.data, or in .rgw.buckets.data in older versions).
- This naming scheme reflects the common cases in the Squid release but may evolve over time. Object names can differ in earlier Ceph versions, and certain operations may also result in special cases.
- Here, I am only talking about object data, not the indexes.
In some example scenarios
Scenario | Naming Format |
---|---|
Simple object (object01) 1 MB |
<bucket-id>_object01 (head + data) |
Large object (object02) 64 MB |
<bucket-id>_object02 (head + data) <bucket-id>__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_1 (data stripe1) <bucket-id>__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_2 ... <bucket-id>__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_15 |
Multipart Upload (object03) 64 MB (multipart + stripe) |
<bucket-id>_object03 (head) <bucket-id>__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1 (data part1) <bucket-id>__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2 <bucket-id>__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3 <bucket-id>__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_1 (data part1-stripe1) <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_2 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_3 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_1 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_2 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_3 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_1 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_2 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_3 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_1 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_2 <bucket-id>__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_3 |
Versioned object (object04) 1 MB |
<bucket-id>_object04 (head - olh) <bucket-id>__:DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz_object04 (data - 1st version) <bucket-id>__:8maGj3zMJjL8AK4TlEwS4bQcjf880a0_object04 (data - 2nd version) |
Storage Class + Version (object05) 1 MB |
pool default.rgw.buckets.data : <bucket-id>_object05 (head - olh) <bucket-id>__:IgtezNyY8U771HuLL5fIN9rX8PlrRUJ_object05 (metadata only) pool default.rgw.buckets.data-sandard-ia : <bucket-id>__shadow:IgtezNyY8U771HuLL5fIN9rX8PlrRUJ_.5cxkbTcL2RCE3UrffqWTx8cznAJogQ6_0 (data) |
Here, the <bucket-id> is made up of the zone identifier and the bucket identifier. (ie : d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1
). With d3b27c62-746c-44ea-8623-d0b576f8bec2 as zone-id.
Access data without index
Bucket indexes are mainly useful for certain operations, like listing the contents. For basic PUT and GET requests, the index isn’t always needed. In fact, during a GET, it’s never even called — object names in rados are deterministic, and all the extra details (stripe naming, version pointers, etc.) are stored in the manifest attached to the object. This manifest lives as an XATTR attribute (user.rgw.manifest) on the head object.
Note that if you use storage classes, a “head” object containing this manifest will always be created in the default class (“STANDARD”), even if the object’s data itself is stored in another class. This ensures determinism to retrieve object's metadata (olh or manifest). In fact, all metadatas are also stored in this head object, which means that checking whether an object exists (i.e. HEAD request) is always done only against the pool of the default class.
So in the example above, to fetch object02 and its related stripes, you just need the manifest stored in the first block, which tells you exactly which objects to retrieve next :
Details of previous examples
Upload simple object
dd if=/dev/zero of=file bs=1M count=1
aws s3api put-object --bucket sample-bucket --key object01 --body file
RADOS Objects after upload :
[default.rgw.buckets.index]
.dir.d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1.5 # OMAP List (Add entry)
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object01 # Data (Object content)
XATTR user.rgw.acl # Encoded (ACLPermission)
XATTR user.rgw.etag # String b6d81b360a5672d80c27430f39153e2c
XATTR user.rgw.idtag # String d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.2805643523274957353
XATTR user.rgw.manifest # Encoded (RGWObjManifest)
XATTR user.rgw.pg_ver # 0
XATTR user.rgw.source_zone # 0 (For geo-replication)
XATTR user.rgw.tail_tag # String d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.2805643523274957353
XATTR user.rgw.x-amz-content-sha256 # String 30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58
XATTR user.rgw.x-amz-date # String 20250818T151520Z
Just a look at the index entry that was added: radosgw-admin bi list --bucket sample-bucket --shard-id 5 --object object01
[
{
"type": "plain",
"idx": "object01",
"entry": {
"name": "object01",
"instance": "",
"ver": {
"pool": 7,
"epoch": 1
},
"locator": "",
"exists": true,
"meta": {
"category": 1,
"size": 1048576,
"mtime": "2025-08-18T15:15:23.782312Z",
"etag": "b6d81b360a5672d80c27430f39153e2c",
"storage_class": "",
"owner": "user1",
"owner_display_name": "user1",
"content_type": "",
"accounted_size": 1048576,
"user_data": "",
"appendable": false
},
"tag": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.2805643523274957353",
"flags": 0,
"pending_map": [],
"versioned_epoch": 0
}
}
]
The complete object stat (retrieved from the object's XATTR).
radosgw-admin object stat --bucket sample-bucket --object object01
{
"name": "object01",
"size": 1048576,
"policy": {
"acl": {
"acl_user_map": [
{
"user": "user1",
"acl": 15
}
],
"acl_group_map": [],
"grant_map": [
{
"id": "user1",
"grant": {
"type": {
"type": 0
},
"id": "user1",
"name": "user1",
"permission": {
"flags": 15
}
}
}
]
},
"owner": {
"id": "user1",
"display_name": "user1"
}
},
"etag": "b6d81b360a5672d80c27430f39153e2c",
"tag": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.2805643523274957353",
"manifest": {
"objs": [],
"obj_size": 1048576,
"explicit_objs": false,
"head_size": 1048576,
"max_head_size": 4194304,
"prefix": ".AEbYF6iG4wX6Hj0io9pAaEW-7lXuLZU_",
"rules": [
{
"key": 0,
"val": {
"start_part_num": 0,
"start_ofs": 4194304,
"part_size": 0,
"stripe_max_size": 4194304,
"override_prefix": ""
}
}
],
"tail_instance": "",
"tail_placement": {
"bucket": {
"name": "sample-bucket",
"marker": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"bucket_id": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"placement_rule": "default-placement"
},
"tier_type": "",
"begin_iter": {
"part_ofs": 0,
"stripe_ofs": 0,
"ofs": 0,
"stripe_size": 1048576,
"cur_part_id": 0,
"cur_stripe": 0,
"cur_override_prefix": "",
"location": {
"placement_rule": "default-placement",
"obj": {
"bucket": {
"name": "sample-bucket",
"marker": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"bucket_id": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"key": {
"name": "object01",
"instance": "",
"ns": ""
}
},
"raw_obj": {
"pool": "",
"oid": "",
"loc": ""
},
"is_raw": false
}
},
"end_iter": {
"part_ofs": 4194304,
"stripe_ofs": 0,
"ofs": 1048576,
"stripe_size": 1048576,
"cur_part_id": 0,
"cur_stripe": 0,
"cur_override_prefix": "",
"location": {
"placement_rule": "default-placement",
"obj": {
"bucket": {
"name": "sample-bucket",
"marker": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"bucket_id": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"key": {
"name": "object01",
"instance": "",
"ns": ""
}
},
"raw_obj": {
"pool": "",
"oid": "",
"loc": ""
},
"is_raw": false
}
}
},
"pg_ver": 0,
"source_zone": 0,
"attrs": {
"user.rgw.tail_tag": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.2805643523274957353",
"user.rgw.x-amz-content-sha256": "30e14955ebf1352266dc2ff8067e68104607e750abb9d3b36582b8af909fcb58",
"user.rgw.x-amz-date": "20250818T151520Z"
}
}
Upload Large Object (64MB)
aws s3api put-object --bucket sample-bucket --key object02 --body file
RADOS Objects after upload :
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object02 # Head object + data
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_1 # Part 1
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_2
...
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_.6MiDJtLCoHiDPHxbmw44k28d8WttNCB_15
Multipart upload
The multipart upload scenario
aws s3api create-multipart-upload --bucket sample-bucket --key object03
[default.rgw.buckets.non-ec]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.meta # Encoded
XATTR user.rgw.acl
XATTR user.rgw.pg_ver
XATTR user.rgw.source_zone
XATTR user.rgw.trace
XATTR user.rgw.x-amz-content-sha256
XATTR user.rgw.x-amz-date
Note that we can see the temporary entry in the index. There will be temporary entries for all parts until the multipart upload is completed.
radosgw-admin bi list --bucket sample-bucket --object _multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.meta
{
"type": "plain",
"idx": "_multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.meta",
"entry": {
"name": "_multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.meta",
"instance": "",
"ver": {
"pool": 8,
"epoch": 1
},
"locator": "",
"exists": true,
"meta": {
"category": 3,
"size": 65,
"mtime": "2025-08-18T16:19:36.790504Z",
"etag": "",
"storage_class": "",
"owner": "user1",
"owner_display_name": "user1",
"content_type": "",
"accounted_size": 0,
"user_data": "",
"appendable": false
},
"tag": "_0aZ9_8L50IBfSDSAXbdUaVGZOBLV02Y",
"flags": 0,
"pending_map": [],
"versioned_epoch": 0
}
}
Now, upload parts...
split -b 16M file part-
aws s3api upload-part --bucket sample-bucket --key object03 --part-number 1 --body part-aa --upload-id 2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m
aws s3api upload-part --bucket sample-bucket --key object03 --part-number 2 --body part-ab --upload-id 2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m
aws s3api upload-part --bucket sample-bucket --key object03 --part-number 3 --body part-ac --upload-id 2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m
aws s3api upload-part --bucket sample-bucket --key object03 --part-number 4 --body part-ad --upload-id 2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m
RADOS Objects after upload :
[default.rgw.buckets.non-ec]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.meta # Will be deleted at the end
OMAP key part.00000001
OMAP key part.00000002
OMAP key part.00000003
OMAP key part.00000004
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object03 # XATTR manifest + attr
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1 # (data part1)
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__multipart_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_1 # (data part1-stripe1)
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.1_3
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_1
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.2_3
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_1
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.3_3
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_1
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow_object03.2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m.4_3
Complete the upload :
echo '{
"Parts": [
{ "PartNumber": 1, "ETag": "\"2c7ab85a893283e98c931e9511add182\"" },
{ "PartNumber": 2, "ETag": "\"2c7ab85a893283e98c931e9511add182\"" },
{ "PartNumber": 3, "ETag": "\"2c7ab85a893283e98c931e9511add182\"" },
{ "PartNumber": 4, "ETag": "\"2c7ab85a893283e98c931e9511add182\"" }
]
}' > parts.json
aws s3api complete-multipart-upload --bucket sample-bucket --key object03 --upload-id 2~EGGWehMSzXC49Y0WiRZbCzijLH4pQ4m --multipart-upload file://parts.json
Versionned object
Enable versionning and upload first object04 :
aws s3api put-bucket-versioning --bucket sample-bucket --versioning-configuration Status=Enabled
dd if=/dev/zero of=file bs=1M count=1
aws s3api put-object --bucket sample-bucket --key object04 --body file
{
"ETag": "\"b6d81b360a5672d80c27430f39153e2c\"",
"VersionId": "DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz"
}
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object04 (head)
XATTR user.rgw.idtag STRING qhw3f5wgbht2p8d91vf9xcw2bpir519q
XATTR user.rgw.olh.idtag STRING r11j012lzvtuqvg3bnfh6r5j3cq5f121
XATTR user.rgw.olh.info Encoded (RGWOLHInfo) Object Logical Head Info
XATTR user.rgw.olh.ver STRING 2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__:DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz_object04
XATTR user.rgw.acl
XATTR user.rgw.etag
XATTR user.rgw.idtag
XATTR user.rgw.manifest
XATTR user.rgw.pg_ver
XATTR user.rgw.source_zone
XATTR user.rgw.tail_tag
XATTR user.rgw.x-amz-content-sha256
XATTR user.rgw.x-amz-date
Let's take a look at the OLH pointer :
rados -p default.rgw.buckets.data getxattr d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object04 user.rgw.olh.info \
| ceph-dencoder import - type RGWOLHInfo decode dump_json \
| jq '.target.key'
{
"name": "object04",
"instance": "DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz",
"ns": ""
}
radosgw-admin object stat --bucket sample-bucket --object object04 | jq -r '.manifest.tail_instance'
DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz
Upload a 2nd version
aws s3api put-object --bucket sample-bucket --key object04 --body file
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object04 (head)
XATTR user.rgw.idtag STRING qhw3f5wgbht2p8d91vf9xcw2bpir519q
XATTR user.rgw.olh.idtag STRING r11j012lzvtuqvg3bnfh6r5j3cq5f121
XATTR user.rgw.olh.info Encoded Object Logical Head Info (i.e. Current version 8maGj3zMJjL8AK4TlEwS4bQcjf880a0)
XATTR user.rgw.olh.ver STRING 2
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__:DY2xZfOgnFzmUrFCtrs6t4ZMyNddRzz_object04
XATTR user.rgw.acl
XATTR user.rgw.etag
XATTR user.rgw.idtag
XATTR user.rgw.manifest
XATTR user.rgw.pg_ver
XATTR user.rgw.source_zone
XATTR user.rgw.tail_tag
XATTR user.rgw.x-amz-content-sha256
XATTR user.rgw.x-amz-date
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__:8maGj3zMJjL8AK4TlEwS4bQcjf880a0_object04
XATTR user.rgw.acl
XATTR user.rgw.etag
XATTR user.rgw.idtag
XATTR user.rgw.manifest
XATTR user.rgw.pg_ver
XATTR user.rgw.source_zone
XATTR user.rgw.tail_tag
XATTR user.rgw.x-amz-content-sha256
XATTR user.rgw.x-amz-date
Get the manifest : radosgw-admin object manifest --bucket sample-bucket --object object04
{
"size": 1048576,
"objects": [
{
"index": -1,
"offset": 0,
"size": 0,
"raw_obj": {
"pool": "default.rgw.buckets.data",
"oid": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object04",
"loc": ""
}
},
{
"index": 0,
"part_id": 0,
"stripe_id": 0,
"offset": 0,
"size": 1048576,
"raw_obj": {
"pool": "default.rgw.buckets.data",
"oid": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__:8maGj3zMJjL8AK4TlEwS4bQcjf880a0_object04",
"loc": ""
}
}
]
}
Last step: remove the object
aws s3 rm s3://sample-bucket/object04
Now we can see the delete marker with version ID 4svnCVPh7Qmjz04B4gSU6xgfrCMA4cQ, and the attribute removed": true
in the OLH info.
rados -p default.rgw.buckets.data getxattr d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object04 user.rgw.olh.info \
| ceph-dencoder import - type RGWOLHInfo decode dump_json
{
"target": {
"bucket": {
"name": "sample-bucket",
"marker": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"bucket_id": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1",
"tenant": "",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
}
},
"key": {
"name": "object04",
"instance": "4svnCVPh7Qmjz04B4gSU6xgfrCMA4cQ",
"ns": ""
}
},
"removed": true
}
Non-Standard Storage Class Object
Add a STANDARD_IA storage class and put object05 (1 MB) into it.
radosgw-admin zonegroup placement add --placement-id default-placement --storage-class STANDARD_IA
radosgw-admin zone placement add --placement-id default-placement --storage-class STANDARD_IA --data-pool default.rgw.buckets.data-standard-ia
ceph orch restart rgw.default
aws s3api put-object --bucket sample-bucket --key object05 --body file --storage-class STANDARD_IA
[default.rgw.buckets.data]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object05 (head)
XATTR user.rgw.idtag
XATTR user.rgw.olh.idtag
XATTR user.rgw.olh.info OLH Info
XATTR user.rgw.olh.ver
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__:IgtezNyY8U771HuLL5fIN9rX8PlrRUJ_object05 (0 size object)
user.rgw.acl
user.rgw.etag
user.rgw.idtag
user.rgw.manifest --> Contain the storage class "placement_rule": "default-placement/STANDARD_IA"
user.rgw.pg_ver
user.rgw.source_zone
user.rgw.storage_class --> STRING STANDARD_IA
user.rgw.tail_tag
user.rgw.x-amz-content-sha256
user.rgw.x-amz-date
[default.rgw.buckets.data-standard-ia]
d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow:IgtezNyY8U771HuLL5fIN9rX8PlrRUJ_.5cxkbTcL2RCE3UrffqWTx8cznAJogQ6_0 (data)
In the object's manifest, we can see the pool default.rgw.buckets.data-standard-ia
, retrieved from the attributes and zone configuration.
radosgw-admin object manifest --bucket sample-bucket --object object05
{
"size": 1048576,
"objects": [
{
"index": -1,
"offset": 0,
"size": 0,
"raw_obj": {
"pool": "default.rgw.buckets.data",
"oid": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1_object05",
"loc": ""
}
},
{
"index": 0,
"part_id": 0,
"stripe_id": 0,
"offset": 0,
"size": 1048576,
"raw_obj": {
"pool": "default.rgw.buckets.data-standard-ia",
"oid": "d3b27c62-746c-44ea-8623-d0b576f8bec2.14227.1__shadow:IgtezNyY8U771HuLL5fIN9rX8PlrRUJ_.5cxkbTcL2RCE3UrffqWTx8cznAJogQ6_0",
"loc": ""
}
}
]
}
Some References
- Doc RGW Data Layout : https://docs.ceph.com/en/squid/radosgw/layout/
- Doc Dev RadosGW : https://docs.ceph.com/en/squid/dev/radosgw/
- Ceph Sources : https://github.com/ceph/ceph/