CephNotes

Some notes about Ceph
Laurent Barbe @Adelius / INRAE

Internal RADOS Object Names Used by RadosGW

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 :

exemple-get-object02

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

Comments